是否可以从程序中某些其他位置的派生类实例访问基类公共成员.
class base {
public:
int x;
base(int xx){
x = xx;
}
};
class derived : base {
public:
derived(int xx) : base(xx){
}
};
class main {
public:
derived * myDerived;
void m1(){
myDerived = new derived(5);
m2(myDerived);
}
void m2(derived * myDerived){
printf("%i", myDerived->x);
}
};
Run Code Online (Sandbox Code Playgroud)
在上面的代码之后,我得到了以下错误.
`error: 'int base::x' is inaccessible`
Run Code Online (Sandbox Code Playgroud)
问题是你不小心在这里使用私有继承
class derived : base {
Run Code Online (Sandbox Code Playgroud)
这使得派生类中的所有基类成员都是私有的.
将此更改为
class derived : public base {
Run Code Online (Sandbox Code Playgroud)
它将按预期工作.
您从基类私下继承.您通常需要的是公共继承:
class derived : public base
Run Code Online (Sandbox Code Playgroud)
这是私有继承的常见问题.