代码中有些不懂
[size=24px]红色代码,是否能换一种好理解的写法[/size]
#include "iostream"
using namespace std;
class mammal
{
public:
mammal():itsage(1){cout<<"mammal constructor..."<<endl;}
virtual ~mammal(){cout<<"mammal destructor..."<<endl;}
mammal(const mammal & rhs):itsage(rhs.getage()){cout<<"mammal copy constructor..."<<endl;}
virtual void speak()const{cout<<"mammal speak!"<<endl;}
virtual mammal*clone(){return new mammal(*this);}
int getage()const{return itsage;}
protected:
int itsage;
};
class dog:public mammal
{
public:
dog(){cout<<"dog constrrctor..."<<endl;}
virtual~dog(){cout<<"dog destructor..."<<endl;}
dog(const dog&rhs):mammal(rhs){cout<<"dog copy constructor..."<<endl;}
void speak(){cout<<"woof!"<<endl;}
virtual mammal*clone(){return new dog(*this);}
};
class cat:public mammal
{
public:
cat(){cout<<"cat constructor..."<<endl;}
~cat(){cout<<"cat destructor..."<<endl;}
cat(const cat &rhs):mammal(rhs){cout<<"cat copy constructor..."<<endl;}
void speak()const{cout<<"meow!"<<endl;}
virtual mammal*clone(){return new cat(*this);}
};
enum ANIMALS{MAMMAL,DOG,CAT};
const int NumAnimalTypes=3;
void main()
{
mammal*theArray[NumAnimalTypes]; mammal*ptr;int choice,i;
for(i=0;i<NumAnimalTypes;i++)
{
cout<<"(1)dog (2)dog (3)Mammal:";
cin>>choice;
switch(choice)
{
case DOG:ptr=new dog;break;
case CAT:ptr=new cat;break;
default:ptr=new mammal;break;
}
theArray[i]=ptr;
}
mammal*OtherArray[NumAnimalTypes];
for(i=0;i<NumAnimalTypes;i++)
{
theArray[i]->speak();
OtherArray[i]=theArray[i]->clone();
}
for(i=0;i<NumAnimalTypes;i++)
OtherArray[i]->speak ();
}