#include<stdio.h>
class A {public: int a; };
class B: public A {private: int a;};
int main(){
B b;
printf("%d", b.a);
return 0;
}
#include<stdio.h>
class A {public: int a; };
class B: private A {};
int main(){
B b;
printf("%d", b.a);
return 0;
}
我问,因为我得到了不同的错误:
error: 'int B::a' is private
error: 'int A::a' is inaccessible
除了错误可能揭示的内容之外,这两段代码的行为是否有任何区别?
答案 0 :(得分:2)
他们是不同的。在第一个实例中,您将创建变量“a”的两个实例。一个在基类中,一个在子类中。在这两个示例中,您都无法访问变量。
如果你有:
A *pA = new B();
pA->a; // This will refer to A::a, which is allowed as it was defined public.
B *pB = new B();
pB->a; // This will refer to B::a, which you can't get access to.
如果你想隐藏对'a'变量的访问,我建议使用私有继承的第二个例子。请注意,私有继承也会使基类中定义的任何函数变为私有。
答案 1 :(得分:2)
在您的第一个示例中,类B
有两个名为a
的成员,它从类A
继承的成员以及它自己定义的成员。因此,B类的对象最终会变大,您仍然可以明确地访问类A
的{{1}}成员:
a