c++ - 是否有必要为派生类创建一个复制构造函数?

标签 c++ oop copy-constructor

如果我有一个带有复杂数据成员的基类,比方说 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 对象。如果我像上面那样写我的代码,它的名字也会被深度复制吗?

最佳答案

不,你不知道。默认情况下(如 Mammal),复制构造函数将调用每个基类的复制构造函数(按顺序),然​​后是每个成员变量的复制构造函数(按顺序)。因此,Mammal 的复制构造函数很好。

请注意我关于“每个成员变量的复制构造函数”的观点。当然 char* 的复制构造函数什么都不做——但是如果你用合适的复制构造函数将 char* 包装在一个类中,那么 AnimalHorse 都可以将该类用作它们的成员变量 - 并且不需要它们自己的复制构造函数。

当然,事实上,std::string 已经为您提供了(但我假设您在现实中有更复杂的情况)。

关于c++ - 是否有必要为派生类创建一个复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56398691/

相关文章:

c++ - 删除元组成员的复制构造函数导致错误

c++ 17在编译时将具有已删除复制构造函数的类添加到std::vector

使用结构成员和指针的 C++ 冒泡排序

c++ - 如何在 C++ 中模板化完整的类

php - OOP 中的 Cookie 检查

javascript - 在构造函数方法中将类的所有属性作为参数传递是否有意义?

c++ - 复制构造函数调用 boost::multi_index_container 中的自定义排序谓词

C++ 左值需要作为一元 '&' 操作数

c++ - fork/pipes 和运行多个程序

java - 避免使用 if 对于链式对象