myClass::myClass(Mesh &mesh) : baseClass(mesh)
{
pointer = new Thing(mesh);
}
网格没有保存在myClass中,也没有在baseClass中保存网格的getter。这只是必须在基类中实现getter的情况吗?
例如你不能这样做:
myClass::myClass(const myClass& original) : baseClass(mesh) //there is no mesh
{
pointer = new Thing(mesh); //mesh is no longer in the parameter list
}
编译器在为这些类创建默认复制构造函数时如何制作此副本?或者这是一个需要复制构造函数的情况?网格不是大脑的私人成员,并且没有吸气剂,所以我们如何制作新的东西?
编辑 - 通过添加Thing
答案 0 :(得分:6)
mesh
复制构造函数中复制 baseClass
。
class baseClass
{
Mesh myMesh;
public:
baseClass(const baseClass &other) : myMesh(other.myMesh) {} // <--- copy Mesh
};
class myClass : public baseClass
{
public:
myClass(const myClass& other) : baseClass(other) {} // <--- simply pass
};
答案 1 :(得分:3)
每个班级都必须照顾自己的复制品。
myClass的默认复制构造函数将简单地为基类(以及每个其他成员)调用复制构造函数。
答案 2 :(得分:1)
大麻复制构造函数将是:
MyClass::MyClass( MyClass const& other )
: BaseClass( other )
{
}
BaseClass
的复制构造函数将采用const引用
BaseClass
和other
会隐式转换。复制构造函数
然后BaseClass
会做任何必要的事情。
这是隐式生成的构造函数,因此您不必这样做 提供它,只要您对生成的其他方面感到满意 构造函数:公共和内联。