所以,标题可能有点令人困惑,但这是我的问题:
我有一个超类(让我们称之为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
}
};
Run Code Online (Sandbox Code Playgroud)
这将用于已经初始化(并且可能已经工作)的SupClass对象的情况,但是在短时间内,或者从那时起你想要使用InhClass对象.我可以用它的基类对象初始化我的子类,而不是复制所有东西(或者关闭并重新打开文件).
提前致谢,
我对任何英语错误感到抱歉,
你必须复制或移动它成为新对象的一部分; 没有办法将现有对象转换为新类型.
以通常的方式在初始化列表中初始化它.
// Copy an existing object
InhClass(SupClass const & obj) : SupClass(obj) {}
// Move an existing object
InhClass(SupClass && obj) : SupClass(std::move(obj)) {}
Run Code Online (Sandbox Code Playgroud)
为避免复制/移动,您必须使用继承之外的其他内容.您可以拥有一个"包装器"类,其中包含指向a的指针/引用SupClass,以及您想要扩展它的任何内容.
struct Wrapper {
SupClass & obj;
// Refer to existing object without creating a new one
Wrapper(SupClass & obj) : obj(obj) {}
};
Run Code Online (Sandbox Code Playgroud)