为什么子类管理访问C++私有继承成员?

Why sub class manage to access c++ private inheritance member?

本问题已经有最佳答案,请猛点这里访问。

我的问题是为什么b.getmultiply();不会导致编译错误?

B类是A类的私有继承人,xy类是A类的成员。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class A {
    public:
    int x;
    int y;
    void set(int a, int b) { x = a; y =b;}
    };

class B : private A{
    public:
    int getmultiply (void){
        return x*y;}
};  

int main(void)
{
   B b;
    //b.set(3,4);     // this will cause compilation error
   cout << b.getmultiply();   // why this will not??
   return 0;
}


当私有继承自基类时,其公共成员将成为派生类的私有成员。这些成员在派生类(例如B.getmultiply()的成员函数内部是公共的和可访问的,但是是私有的,并且不能被派生类的朋友之外的代码(例如main()访问。


当一个类从另一个类私有继承时,它仍然可以访问该类(非私有)成员,就像在公共继承下一样。只有外部世界没有这种访问权限,因为它们在派生类的上下文中是私有的(事实上,外部世界甚至不知道派生是派生的:例如,您不能引用具有A类型指针的B的实例)。