【问题标题】:Private inheritance and access私有继承和访问
【发布时间】:2015-03-21 22:28:38
【问题描述】:

我正在看书后面的这个问题,这让我有点困惑。这是假的吧?

在私有继承中,基类的所有公共和受保护成员都可以在派生类中访问,但不能通过派生类访问。

【问题讨论】:

  • 听起来主要是真的(取决于“通过派生类”的意思)。为什么你认为它是假的?
  • 你为什么认为这是错误的?这不应该发生吗?
  • 我重复了很多次作为对 SO 的评论:如果您对公共/受保护/私有继承的工作方式有任何疑问,这是链接:stackoverflow.com/q/860339/3093378(查看投票最多的答案)我无法获得的唯一继承类型(我真的认为不仅仅是晦涩难懂)是protected 继承。也许有人可以告诉我它为什么有用。我投票结束您的问题,因为 afaik 它与 stackoverflow.com/q/860339/3093378 重复

标签: c++


【解决方案1】:

这是真的。子类可以在内部使用基类方法。但是派生类的实例无法访问基类的方法。

void Subclass::baseClassMethodOverride()
{
    useBaseClassMethod(); //<---- ALLOWED
}

int main()
{
    SubClass instance;
    instance.useBaseClassMethod(); //<-----NOT ALLOWED
}

【讨论】:

    【解决方案2】:

    确实如此。

    如果您有 publicprotected 成员,则可以在派生类中访问它们,而无需考虑继承的访问修饰符

    【讨论】:

      【解决方案3】:

      这就是私有继承的定义。例如,N4140 说明:

      §11.2/1 [...] 如果一个类被声明为另一个类的基类 使用private 访问说明符、publicprotected 基类的成员可以作为 private 访问 派生类的成员115.

      此外,

      §11/1 类的成员可以是

      ——private;也就是它的名字只能被会员和朋友使用 声明它的类。

      短语“但不能通过派生类访问”。有点含糊,但如果本意是“除了friends,不能在派生类之外访问”,那就对了。

      注意:将访问说明符理解为与继承有关。也就是说,私有继承意味着它继承的是私有的,而不是它继承私有成员。

      【讨论】:

        猜你喜欢
        • 2018-04-21
        • 1970-01-01
        • 2012-01-04
        • 1970-01-01
        • 2017-12-01
        • 2020-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多