C++继承:成员的范围和可见性

Moe*_*oeb 5 c++ inheritance class redeclaration

你能解释为什么不允许这样做,

#include <stdio.h>

class B {
private:
    int a;
public:
    int a;
};

int main() {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

虽然这是?

#include <stdio.h>

class A {
public:
    int a;
};

class B : public A{
private:
    int a;
};

int main() {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我们有一个公钥和一个名为私有变量aclass B.


现在编辑!

Ara*_*raK 15

在这两种情况下,我们在B类中有一个名为a的公共变量和一个私有变量.

不,那不是真的.

在第一种情况下,在同一范围内不能有两个具有相同名称的标识符.在第二种情况下,B::a隐藏A::a和访问A::a您必须完全限定名称:

b.a = 10; // Error. You can't access a private member.
b.A::a = 10; // OK.
Run Code Online (Sandbox Code Playgroud)