在阅读“Sams在21天内自学c ++”时,我无法理解虚拟拷贝构造函数是如何工作的。 书中的完整代码在这里: [http://cboard.cprogramming.com/cplusplus-programming/9392-virtual-copy-constructor-help.html] [1]
特别是虚方法Clone()调用Mammal拷贝构造函数和Dog拷贝构造函数 因为它返回“哺乳动物*”并返回“新狗(* this)”
Mammal::Mammal(const Mammal &rhs):itsAge(rhs.GetAge())
{
cout << "Mammal copy constructor\n";
};
Dog::Dog (const Dog &rhs):Mammal(rhs) //what is ":Mammal(rhs)" here -
// call of Mammal copy constructor?
//if not why is it required?
//or what is it here?
{
cout << "Dog copy constructor\n";
};
什么回归“归来新狗(*这个)”? 新对象或新对象的指针?
感谢您的回答。 附: 抱歉我的错误标签以前的答案。 这是我第一次使用'stackoverflow'
答案 0 :(得分:0)
Dog(*this);
通过调用复制构造函数创建一个Dog类型的对象。由于Dog来源于哺乳动物,因此称为哺乳动物构造函数。特别是,您可以从此代码中看到
Dog::Dog(const Dog & rhs):
Mammal(rhs)
调用Mammal的拷贝构造函数,将rhs作为参数传递。
new Dog(*this);
返回指向Dog类型的堆分配对象的指针,该对象使用复制构造函数初始化(参见上文)。当
virtual Mammal* Clone() { return new Dog(*this); }
被调用,新操作符返回的Dog *被转换为Mammal *并返回。