哪位高手能理解小弟我从书上抄写的代码?
谁能理解我从书上抄写的代码???
#include <iostream>
using namespace std;
enum TYPE{HORSE,PEGASUS};
class Horse
{
public:
virtual void Gallop(){cout < < "Galloping...\n ";}
private:
int itsage;
};
class Pegasus:public Horse
{
public:
virtual void fly(){cout < < "I can fly!I can fly!I can fly!\n ";}
};
const int NumberHorses =5;
int main()
{
Horse *Ranch[NumberHorses];
Horse*pHorse;
int choice,i;
for(i=0;i <NumberHorses;i++)
{
cout < < "(1)Horse(2)Pegasus; ";
cin> > choice;
if(choice==2)
pHorse=new Pegasus;
else
pHorse=new Horse;
Ranch[i]=pHorse;
}
cout < < "\n ";
for(i=0;i <NumberHorses;i++)
{
Pegasus *pPeg=dynamic_cast <Pegasus*> (Ranch[i]);
if(pPeg)
pPeg-> fly();
else
cout < < "just a horse\n ";
delete Ranch[i];
}
return 0;
}
Pegasus *pPeg=dynamic_cast <Pegasus*> (Ranch[i]);究竟是什么意思????
------解决方案--------------------
编译的时候记得打开rtti
class base
{
public :
virtual void Do()
{
cout < < "base::Do " < <endl;
};
};
class test:public base
{
public:
void Do()
{
cout < < "test::Do " < <endl;
};
void Func()
{
cout < < "test::Func " < <endl;
};
};
int main(int argc, char* argv[])
{
base* p = new test;
p-> Do();
test* p1 = dynamic_cast <test*> (p);
if( p1 )
p1-> Func();
test* p2 = static_cast <test*> (p);
if( p2 )
p2-> Func();
return 0;
}
#include <iostream>
using namespace std;
enum TYPE{HORSE,PEGASUS};
class Horse
{
public:
virtual void Gallop(){cout < < "Galloping...\n ";}
private:
int itsage;
};
class Pegasus:public Horse
{
public:
virtual void fly(){cout < < "I can fly!I can fly!I can fly!\n ";}
};
const int NumberHorses =5;
int main()
{
Horse *Ranch[NumberHorses];
Horse*pHorse;
int choice,i;
for(i=0;i <NumberHorses;i++)
{
cout < < "(1)Horse(2)Pegasus; ";
cin> > choice;
if(choice==2)
pHorse=new Pegasus;
else
pHorse=new Horse;
Ranch[i]=pHorse;
}
cout < < "\n ";
for(i=0;i <NumberHorses;i++)
{
Pegasus *pPeg=dynamic_cast <Pegasus*> (Ranch[i]);
if(pPeg)
pPeg-> fly();
else
cout < < "just a horse\n ";
delete Ranch[i];
}
return 0;
}
Pegasus *pPeg=dynamic_cast <Pegasus*> (Ranch[i]);究竟是什么意思????
------解决方案--------------------
编译的时候记得打开rtti
class base
{
public :
virtual void Do()
{
cout < < "base::Do " < <endl;
};
};
class test:public base
{
public:
void Do()
{
cout < < "test::Do " < <endl;
};
void Func()
{
cout < < "test::Func " < <endl;
};
};
int main(int argc, char* argv[])
{
base* p = new test;
p-> Do();
test* p1 = dynamic_cast <test*> (p);
if( p1 )
p1-> Func();
test* p2 = static_cast <test*> (p);
if( p2 )
p2-> Func();
return 0;
}