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

时间:2016-08-05 15:17:55

标签: c++ inheritance private access

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

班级B是私人继承自班级Axy是班级A的成员。

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;
}

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

当一个类私有地继承自另一个类时,它仍然可以访问该类的(非私有)成员,就像在公共继承下一样。只有外部世界才能访问它们,因为它们在派生类的上下文中变为私有(实际上外部世界甚至不知道派生是派生的:你不能指代例如,B的实例,其指针类型为A