代码中有些不懂

谁学逆向工程 2010-01-17 01:38:42
[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 ();
}
...全文
89 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
we_sky2008 2010-01-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiaoyuanyuan2009 的回复:]
写这句话:
dog *temp = new dog(*this);
的前提,必须有什么样的构造函数吗。是不是得有一个能接受参数的构造函数
[/Quote]
调用的是拷贝构造函数
谁学逆向工程 2010-01-17
  • 打赏
  • 举报
回复
写这句话:
dog *temp = new dog(*this);
的前提,必须有什么样的构造函数吗。是不是得有一个能接受参数的构造函数
DLevel 2010-01-17
  • 打赏
  • 举报
回复
那句话的意思创建一个新的对象,并且把对象自己当作复制构造函数的参数,传递过去

写的很经典。

但是也可以修改
如下
在dog中
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(){dog *temp = new dog(*this);return temp} //创建一个类,并复制自自己作为新对象的构造。最后返回这个对象的地址
};

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧