C ++构造函数传递对基类对象的引用

时间:2018-08-30 09:40:39

标签: c++ inheritance copy-constructor

我试图了解副本构造函数。在下面的构造函数定义中,类DataModelComputationModel派生而来。

我的问题是,当您将对基类的引用传递给派生类的构造函数时,这是副本构造函数吗?

为什么默认的复制构造函数在这里不够用?

class DataModel : public ComputationModel {
    public:
      DataModel(const ComputationalModel &other);

      //..
};

mv::DataModel::DataModel(const ComputationModel &other) :
    ComputationModel(other)
{}

1 个答案:

答案 0 :(得分:0)

从技术上讲,您可以使用git rebase引用作为函数参数来定义git reset的副本构造函数。

DataModel

但是,这几乎绝不是一个好主意,因为对象的复制构造通常需要从中复制对象的状态。传递基类引用时,将删除派生类实例的所有数据成员,这会使新创建的对象处于难以从客户端代码猜到的状态。

在您的情况下,默认的复制构造函数具有完全相同类型的const限定引用参数:

ComputationalModel

这使我想到了您的最后一个问题

  

为什么这里的默认副本构造函数不够用?

如果不查看继承层次结构的其余部分,这很难分辨。指导原则是:如果层次结构中所有数据成员的副本构造函数执行正确的操作,则默认的副本构造函数也执行正确的操作。