繁体   English   中英

C++:关于 inheritance 中访问说明符的问题

[英]C++: Question on access specifier in inheritance

这是以下代码。

#include <iostream>
using namespace std;

class B {
    private:
        int a=1;
    protected:
        int b=2;
    public:
        int c=3;
};

class D : protected B { // clause 1
};

class D2 : public D { // clause 2
    void x() {
       c=2;
    }
};

int main() {
    D d;
    D2 d2;
    cout << d2.c; // clause 3 Error due to c being protected
    return 0;
}

笔记:

  1. 第 1 条将使 c 受到保护。
  2. 第 2 条将使 c(受第 1 条保护)再次公开。
  3. 为什么第 3 条失败了?

您的笔记不完全正确:

  1. private inheritance 使publicprotectedprivate成员在派生 class 中成为private成员
  2. protected inheritances 使publicprotected成员在派生 class 中protected ,而private成员保持private
  3. public inheritance 对派生成员的访问没有任何改变。

c因为inheritance是public ,所以在D中受到protected ,在D2中仍然protected 。没有办法欺骗可见性。 你的假设会打破逻辑。 能见度只会下降,不会上升。

您使用的 inheritance 的类型不会影响父 class 中成员的保护级别。它只会更改子 class 中这些成员的保护级别。

当您定义class D: protected B时,它等效于这样定义 class D:

class D
{
protected:
  int b=2;
  int c=3;
};

然后,当您定义class D2: public D时,它等效于这样定义 class D2:

class D2
{
protected:
  int b=2;
  int c=3;
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM