用基础 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" 将为您提供更多信息。