为什么派生类可以访问基类的私有字段?

问题描述 投票:0回答:1
class Base {
 public:
  class FirstBase {
    friend class Base;
    int x = 10;
  };

  class SecondBase : public FirstBase {
   public:
    SecondBase() : FirstBase() {}
    void t() { std::cout << FirstBase::x; }
  };
};

这段代码可以编译并运行,但我不明白为什么它可以运行。可以解释或引用来源来阅读吗?

我使用 gcc 版本 11.4.0 std=C++17

c++ inheritance c++17 friend
1个回答
0
投票

因为Base是FirstBase的朋友。因此,在 Base 内您可以访问 FirstBase 中的所有内容。而且 SecondBase 位于 Base 内部,因此 SecondBase 可以访问 FirstBase。如果您删除好友关系或将 SecondBase 移至 Base 之外,它会如您所料立即中断。

© www.soinside.com 2019 - 2024. All rights reserved.