c++ - 从另一个子集中的子集中访问超集变量

标签 c++ class subset superclass

在 C++ 类中,如何从另一个子集中访问超集的变量?这只能作为示例以直观方式显示,以供您理解。

中央情报局高于总统,有权对总统保密信息。

class CIA {
public:
    bool aliensExist = true; // 100%
};

class President {
public:
    bool doAliensExist() {
        return aliensExist; // Not sure, no access to CIA's aliensExist variable
    }
};

class Subset : public President, public CIA {

};

int main() {
    Subset subset;
    cout << "Aliens exist = " << subset.doAliensExist() << endl;
}

如何从 Subset 类中使用 President 类中的方法访问 aliensExist

我知道上面的例子是不合逻辑的,当然 President 不能访问 CIA 除非它是它的直接子集,但我想知道什么是好的方法是这样的吗?

最佳答案

您错误地(过度)使用了继承。当然,您很难找到解决方案,因为该模型从根本上是错误的。您似乎认为类层次结构在某种程度上类似于数学集合...

D 应该继承自类 B 当且仅当它们之间存在 is a 的关系,即 D 是B.

在您的示例中,从 CIAPresident 继承是没有意义的,因为该实体将是 CIA 总统同时。我认为这违反宪法(或至少是非法的)。

所以你需要改变你的模型。 OOP 和继承不是万能的 chalice 。

关于c++ - 从另一个子集中的子集中访问超集变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46438051/

相关文章:

r - 根据另一个数据框中的多个条件过滤数据框

c++ - 使用多个条件对 C++ 字符串进行排序

java - C++ 相当于 Java 的 this.getClass().getSimpleName();

javascript - 如何将一个类嵌套在另一个类中?

java - 创建未知数量对象实例的有效方法

R arules - 匹配规则的交易子集

r - NA 子集如何工作?

c++ - 在 Windows 中加入等效项

c++ - 内存错误c++ private int

java - Java Classloader 能否重写系统类(仅它们的副本)的字节码?