【发布时间】:2019-05-31 16:25:35
【问题描述】:
如果我有一个具有复杂数据成员的基类,比如说char*,并且在我的继承链的末尾我有另一个具有相同类型 DM 的类,我是否必须实现所有的 CCTOR其他课程在路上?
例如:
动物类:
class Animal
{
int age;
char* name;
Animal() { ... }
Animal(const Animal &animal) { ..deep copying name..}
}
哺乳动物类:
class Mammal : public Animal
{
int height;
Mammal() { ... }
}
马类:
class Horse : public Mammal
{
char* color;
Horse() { ... }
Horse(const Horse &horse ) { ..deep copying color..}
}
我是否需要在 Mammal 中实现 CCTOR,即使它只有一个 int 作为数据成员?
基本上我的问题是:复制复杂对象(由多个类构建)时,编译器是否分别激活每个部分的 CCTOR?
编辑:
需要明确的是,我想复制一个 Horse 对象。如果我按照上面的方式编写代码,它的名称也会被深度复制吗?
【问题讨论】:
-
除非您自己指定,否则复制构造函数将由编译器生成。
-
如果您使用
std::string而不是char*,则无需为任何类编写复制构造函数。 -
尝试使用 Horse(const Horse& horse): Mammal(horse) {...}
-
而且您不需要为哺乳动物实施单独的 CCTOR。在这种情况下,默认值会完成它需要做的所有工作。
标签: c++ oop copy-constructor