使用基类对象C++初始化子类
Initialize child class with base class object C++?
所以,标题可能有点令人困惑,但我的问题是:
我有一个超类(我们称之为SupClass)和一个继承自SupClass的子类(我们将其称为InhClass。)。现在,我想为我的InhClass创建一个构造函数,它接收一个SupClass对象,并用它初始化InhClass的"SupClass部分"
下面是一个代码示例,试图说明这一点:
Class SupClass {
public:
SupClass() {
//Initialize SupClass object
}
};
Class InhClass : private SupClass {
public:
InhClass(SupClass obj) {
//Initialize SupClass inheritance with obj
}
};
这将用于您已经初始化了SupClass对象(并且可能正在处理),但时间很短的情况,或者从那时起您想要使用InhClass对象。我可以用基类对象初始化我的子类,而不是复制所有内容(例如,关闭并重新打开文件)。
提前感谢
我对任何英语错误感到抱歉,
您必须复制或移动它才能成为新对象的一部分;没有办法将现有对象转换为新类型。
按常规方式在初始化程序列表中对其进行初始化。
// Copy an existing object
InhClass(SupClass const & obj) : SupClass(obj) {}
// Move an existing object
InhClass(SupClass && obj) : SupClass(std::move(obj)) {}
为了避免复制/移动,您必须使用继承以外的东西。您可以有一个"包装器"类,该类包含指向SupClass
的指针/引用,以及您想要扩展它的任何内容。
struct Wrapper {
SupClass & obj;
// Refer to existing object without creating a new one
Wrapper(SupClass & obj) : obj(obj) {}
};
尝试装饰器模式:
struct Interface {
virtual void function() = 0;
};
struct Implementation: Interface {
virtual void function() { ...}
};
struct Decorator: Interface {
explicit Decorator(Interface& decorated): m_decorated(decorated) {}
virtual void function() {
// Call m_decorated.function() if you want,
// adjusting the results or parameters.
...
}
private:
Interface& m_decorated;
};
搜索"decorator模式"将为您提供一系列进一步的信息。
相关文章:
- C++初始化基类
- 为什么在C++中首先初始化成员类
- 如何初始化矢量的模板化子类
- 初始化指向类实例的智能指针并访问其方法
- C++17 使用驱动类常量作为基类构造函数的参数来初始化基类构造函数
- 初始化模板类中的固定长度数组
- 在 C++11 中轻松初始化模板类的静态成员,没有 clang 警告
- C++ 如何从虚拟类的模板化子类中获取数据?
- 如何从子类的构造函数初始化父类的私有成员
- C++构造函数如何初始化其类的对象?
- 我是否需要在虚拟继承类的构造函数中初始化基类以解决菱形继承问题?
- 如何从其抽象母类上的指针初始化子类?
- 通过构造函数请求数组来初始化子类
- c++:可以使用父构造函数初始化子类中的数据吗?
- 在父窗口/小部件类中初始化子小部件的目的是什么?
- 使用基类对象C++初始化子类
- 使用Parent构造函数初始化子类
- 我可以调用一个虚拟函数来初始化基类子对象吗
- c++ 子类 无法初始化基类的成员变量?
- 在子类中初始化父类的 const 成员