我的问题是为什么b.getmultiply();
不会导致编译错误?
班级B
是私人继承自班级A
,x
和y
是班级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;
}
答案 0 :(得分:3)
当您从基类继承私有时,其公共成员将成为派生类的私有成员。这些成员是公共的,可以在派生类的成员函数内部访问(例如B.getmultiply()
),但它们是私有的,不能被外部代码(例如main()
)访问,而外部代码不是派生类的朋友。
答案 1 :(得分:0)
当一个类私有地继承自另一个类时,它仍然可以访问该类的(非私有)成员,就像在公共继承下一样。只有外部世界才能访问它们,因为它们在派生类的上下文中变为私有(实际上外部世界甚至不知道派生是派生的:你不能指代例如,B
的实例,其指针类型为A
。