派生类的复制构造函数
Copy Constructor for derived class
我有一个基类
class Keyframebase
{
private:
std::string stdstrName;
float time;
KeyframeType keyframeType;
public:
Keyframebase();
Keyframebase(KeyframeType keyType);
Keyframebase(const Keyframebase &key);
Keyframebase& operator = (const Keyframebase &key);
std::string getName();
};
它由另一个类派生。
class SumKeyframeXYZ : public Keyframebase
{
private:
float x;
float y;
float z;
public:
SumKeyframeXYZ();
SumKeyframeXYZ(float x, float y, float z);
SumKeyframeXYZ(const SumKeyframeXYZ& key);
// const Sum_Position& operator=(const Container& container);
SumKeyframeXYZ& operator=(const SumKeyframeXYZ& key);
void setValue(float x, float y, float z);
};
这是派生类的复制构造函数。
SumKeyframeXYZ::SumKeyframeXYZ(const SumKeyframeXYZ& key) : Keyframebase(
key )
{
this->x = key.x;
this->y = key.y;
this->z = key.z;
}
由于我在复制派生类的对象时也想复制基类成员,因此这是将派生类对象作为基类的参数的正确方法。
那么这是将派生类对象作为 基类的参数。
正确。
SumKeyframeXYZ::SumKeyframeXYZ(const SumKeyframeXYZ& key)
: Keyframebase( key ) ///<<< Call the base class copy constructor
这是将派生类对象作为基类的参数提供的正确方法
是的,它是。
或者,您可以在这种情况下应用显式默认的函数定义,例如
SumKeyframeXYZ::SumKeyframeXYZ(const SumKeyframeXYZ& key) = default;
编译器生成的复制构造函数执行与
SumKeyframeXYZ::SumKeyframeXYZ(const SumKeyframeXYZ& key) : Keyframebase(key),
x(key.x),
y(key.y),
z(key.z)
{}
一句话,是的。派生类应该必须处理复制基类属性的逻辑,但将该责任委托给基类,作为正确封装的行为。
那么这是正确的方法
有点像。另见有效C++中的第12项("复制对象的所有部分"(,作者给出了一个非常相似的例子。
但是,请注意,如果可以的话,通常最好使用编译器生成的特殊成员函数的默认版本(假设KeyframeType
是可复制的,并且复制实例可以执行正确的操作(。就你而言,你似乎可以。每当所有数据成员的成员按成员复制时,只需使用
SumKeyframeXYZ(const SumKeyframeXYZ&) = default;
在你的类定义是要走的路。你也可以省略它,但并不是说五法则实际上要求你明确你的特殊成员的default
性,即所有成员(当你的基类中有一个virtual
析构函数时,它就会启动(。
相关文章:
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 当从函数参数中的临时值调用复制构造函数时
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 使用复制构造函数复制双精度数组
- C 无可行的构造函数复制类型的变量
- 没有可行的构造函数复制类型 'MyString' 的数组元素
- 编译时,复制构造函数/复制分配和正常功能调用优化之间是否存在任何区别
- 如何最小化调用列表构造函数(复制构造函数)的次数?
- C 11矢量构造函数复制与范围
- 我定义了一个非复制构造函数;复制构造函数还会被隐式定义吗
- 可以将构造函数复制为转换运算符
- 将基类指针的构造函数复制到子类
- C++树类:构造函数/复制/内存泄漏
- 如何制作这个在模板构造函数复制中使用类型定义的类型的模板
- 将构造函数复制为模板化的成员函数
- 绕过私有复制构造函数/复制赋值C++
- C++通过构造函数复制对象
- 复制构造函数 - 复制C++中的对象
- 将带unique_ptr的类的构造函数复制到作为成员的抽象类