Dog拷贝构造函数[:Mammal(rhs)]中声明了什么?

时间:2013-07-05 12:55:30

标签: c++ oop copy-constructor

在阅读“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'

1 个答案:

答案 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 *并返回。