0

在阅读“Sams 在 21 天内自学 C++”时,我无法理解虚拟复制构造函数是如何工作的。书中的完整代码在这里:[http://cboard.cprogramming.com/cplusplus-programming/9392-virtual-copy-constructor-help.html][1]

特别是虚方法 Clone() 调用 Mammal 复制构造函数和 Dog 复制构造函数,因为它返回“Mammal*”并返回“new 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";
}; 

什么返回“return new Dog(*this)”?新对象或指向新对象的指针?

谢谢您的回答。PS 对不起,我之前的回答带有错误的标签。这是我第一次使用“stackoverflow”

4

1 回答 1

0
Dog(*this); 

通过调用复制构造函数创建一个 Dog 类型的对象。由于 Dog 派生自 Mammal,因此调用了 Mammal 构造函数。特别是,您可以从这段代码中看到

Dog::Dog(const Dog & rhs):
Mammal(rhs)

调用 Mammal 的复制构造函数,将 rhs 作为参数传递。

new Dog(*this);

返回指向 Dog 类型的堆分配对象的指针,该对象使用复制构造函数初始化(见上文)。什么时候

virtual Mammal* Clone() { return new Dog(*this); }

被调用时,由 new 运算符返回的 Dog* 被转换为 Mammal* 并返回。

于 2013-07-05T13:17:53.590 回答