C++ 构造函数传递对基类对象的引用
c++ constructor pass a reference to a base class object
我正在尝试理解复制构造函数。在下面的构造函数定义中,类DataModel
派生自ComputationModel
。
我的问题是,当您将对基类的引用传递给派生类的构造函数时,这是一个复制构造函数吗?
为什么默认的复制构造函数在这里是不够的?
class DataModel : public ComputationModel {
public:
DataModel(const ComputationalModel &other);
//..
};
mv::DataModel::DataModel(const ComputationModel &other) :
ComputationModel(other)
{}
从技术上讲,您可以通过将ComputationalModel
引用作为函数参数来定义DataModel
的复制构造函数。
DataModel d1(/* Parameter... */);
ComputationModel c1(/* Parameter... */);
DataModel d2(d1); // copy-construct instance, d1 passed as refence to the base class
DataModel d3(c1); // same behavior
然而,这几乎不是一个好主意,因为对象的复制构造通常需要对象的状态。传递基类引用时,将删除派生类实例的所有数据成员,这将使新创建的对象处于难以从客户端代码中猜测的状态。
默认复制构造函数具有完全相同类型的 const 限定引用参数,在您的情况下:
DataModel(const DataModel& other) = default;
这让我想到了你的最后一个问题
为什么默认的复制构造函数在这里是不够的?
如果不看到继承层次结构的其余部分,就很难说出这一点。准则是:如果层次结构中所有数据成员的复制构造函数执行正确的操作,则默认的复制构造函数也执行正确的操作。
相关文章:
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- C++对象引用返回不同的值
- 对象引用中的字段以不同的方法返回不同的值
- 通过向构造函数其他对象引用页面来创建对象
- 为什么在对象引用恒定时允许更改为另一个类的指针的成员变量
- 如何在C++中读取 HDF5 对象引用
- C++ 未定义的对象引用
- 从函数返回 libconfig 类设置对象引用
- qt vsaddin错误对象引用未设置为对象的istanse
- 在这种情况下,为什么使用 *此必需的对象引用返回对象引用
- 基本C - 构造contaning对象引用,并将其作为方法参数传递
- C :将对象引用作为参数给出错误:呼叫class :: function()的匹配函数
- C++OOP基础知识-是否正确返回对象引用
- 使用对象引用(可能)在调用destructor后使用对象引用
- 创建返回对象引用的成员函数的最简单方法
- 如何在C++上使用对象引用删除对象
- JNI/Android NDK-维护全局对象引用
- 为什么有些类方法返回"*this"(self的对象引用)?
- 在C++中返回伪对象引用的规则