首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用基类对象C++初始化子类?

用基类对象C++初始化子类?
EN

Stack Overflow用户
提问于 2015-02-26 18:45:37
回答 2查看 2.3K关注 0票数 4

因此,标题可能有点混乱,但我的问题是:

我有一个超类(让我们称它为SupClass)和一个继承自SupClass的子类(让我们称之为InhClass)。现在,我想为我的InhClass做一个构造函数,它接收一个SupClass对象并用它初始化InhClass的"SupClass部件“。

下面是一个代码示例,试图说明这一点:

代码语言:javascript
运行
复制
Class SupClass { 
public:   
       SupClass() {
           //Initialize SupClass object
       }
};

Class InhClass : private SupClass {
public:
       InhClass(SupClass obj) {
            //Initialize SupClass inheritance with obj
       }
};

这将用于已经初始化(并可能正在处理) SupClass对象但时间很短的情况下,或者从那时起要使用InhClass对象。与其复制所有内容(例如,关闭和重新打开文件),我还可以使用它的基类对象初始化我的子类。

提前谢谢你,

我对任何英语错误感到抱歉,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-26 18:47:34

您必须复制或移动它才能成为新对象的一部分;无法将现有对象转换为新类型。

以通常的方式在首字母列表中初始化它。

代码语言:javascript
运行
复制
// Copy an existing object
InhClass(SupClass const & obj) : SupClass(obj) {}

// Move an existing object
InhClass(SupClass && obj) : SupClass(std::move(obj)) {}

为了避免复制/移动,您必须使用继承以外的其他东西。您可以有一个包含指向SupClass的指针/引用的“包装器”类,以及您想要对其进行扩展的任何东西。

代码语言:javascript
运行
复制
struct Wrapper {
    SupClass & obj;

    // Refer to existing object without creating a new one
    Wrapper(SupClass & obj) : obj(obj) {}
};
票数 5
EN

Stack Overflow用户

发布于 2015-02-26 18:59:08

试一试装饰图案:

代码语言:javascript
运行
复制
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;
};

搜索“装饰图案”会给你提供更多的信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28750336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档