用基础 class object C++ 初始化 child class?
Initialize child class with base class object C++?
所以,标题可能有点混乱,但这是我的问题:
我有一个 superclass(我们称之为 SupClass)和一个继承自 SupClass 的 subclass(我们称之为 InhClass)。现在,我想为我的 InhClass 创建一个构造函数,它接收一个 SupClass object 并用它初始化 InhClass 的 "SupClass part"。
下面是一个代码示例,试图说明这一点:
Class SupClass {
public:
SupClass() {
//Initialize SupClass object
}
};
Class InhClass : private SupClass {
public:
InhClass(SupClass obj) {
//Initialize SupClass inheritance with obj
}
};
如果您已经初始化了一个 SupClass object 但时间很短,或者从那时起您想使用 InhClass object.与其复制所有内容(或关闭并重新打开文件,例如),我可以只用它的基础 class object.[= 初始化我的 child class 15=]
提前致谢,
对于任何英文错误,我深表歉意,
您必须复制或移动它才能成为新对象的一部分;无法将现有对象转换为新类型。
以通常的方式在初始化列表中初始化它。
// Copy an existing object
InhClass(SupClass const & obj) : SupClass(obj) {}
// Move an existing object
InhClass(SupClass && obj) : SupClass(std::move(obj)) {}
要避免 copying/moving,您必须使用继承以外的方法。你可以有一个 "wrapper" class 包含一个 pointer/reference 到一个 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 pattern" 将为您提供更多信息。
所以,标题可能有点混乱,但这是我的问题:
我有一个 superclass(我们称之为 SupClass)和一个继承自 SupClass 的 subclass(我们称之为 InhClass)。现在,我想为我的 InhClass 创建一个构造函数,它接收一个 SupClass object 并用它初始化 InhClass 的 "SupClass part"。
下面是一个代码示例,试图说明这一点:
Class SupClass {
public:
SupClass() {
//Initialize SupClass object
}
};
Class InhClass : private SupClass {
public:
InhClass(SupClass obj) {
//Initialize SupClass inheritance with obj
}
};
如果您已经初始化了一个 SupClass object 但时间很短,或者从那时起您想使用 InhClass object.与其复制所有内容(或关闭并重新打开文件,例如),我可以只用它的基础 class object.[= 初始化我的 child class 15=]
提前致谢,
对于任何英文错误,我深表歉意,
您必须复制或移动它才能成为新对象的一部分;无法将现有对象转换为新类型。
以通常的方式在初始化列表中初始化它。
// Copy an existing object
InhClass(SupClass const & obj) : SupClass(obj) {}
// Move an existing object
InhClass(SupClass && obj) : SupClass(std::move(obj)) {}
要避免 copying/moving,您必须使用继承以外的方法。你可以有一个 "wrapper" class 包含一个 pointer/reference 到一个 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 pattern" 将为您提供更多信息。