使用基类对象C++初始化子类

Initialize child class with base class object C++?

本文关键字:初始化 子类 C++ 对象 基类      更新时间:2023-10-16

所以,标题可能有点令人困惑,但我的问题是:

我有一个超类(我们称之为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模式"将为您提供一系列进一步的信息。