【问题标题】:Inheriting a struct privately私下继承结构
【发布时间】:2015-01-23 16:14:54
【问题描述】:

假设我们有这个:

class Father
{
struct features
    {
        string hairColor = blonde;
        int age = 1;
        bool dumb = true;
    } m_Features; 

public:
    Father();
    ~Father();

    bool isDumb() { return m_Features.dumb; }
};

然后我们有另一个类:

class FatherHandler : private Father
{
public:
    // constructors here

    void handle(Father *fa);
};

现在正在实施中:

void FatherHandler::handle(Father *fa)
{
    if (fa->isDumb)
    {
        m_Features.dumb = true; 
    }
}

g++ 编译器不允许上面的代码,因为 m_Features 是私有的;但是我是从父亲那里私下继承的;因此应该允许。如何修改上面的代码,让FatherHandler 可以修改Father 而不会触发这个编译时错误?请注意,我私下继承来表示“使用”标准,而不是公开继承使用“is-a”标准。

【问题讨论】:

  • 首先,为什么m_Features是私有的并且不受保护?其次,为什么不使用封装与继承?你承认自己这不是一个“是”的情况。
  • 你真的应该尝试发布一个 MCVE。示例中的大部分代码都分散了问题的注意力。
  • 我只是在这里做实验。我确实忽略了私有继承并不是它所描述的那样。

标签: c++ class oop design-patterns g++


【解决方案1】:

私有继承意味着基类的公共和受保护成员在继承类中变为私有。派生类仍然不能访问私有成员,除非它被指定为友元。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 2014-05-25
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    相关资源
    最近更新 更多