是否可以从程序中某些其他位置的派生类实例访问基类公共成员。
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);
}
};
在上面的代码之后,我收到了以下错误。
`error: 'int base::x' is inaccessible`
答案 0 :(得分:8)
问题是你不小心在这里使用私有继承
class derived : base {
这使得派生类中的所有基类成员都是私有的。
将此更改为
class derived : public base {
它将按预期工作。
答案 1 :(得分:6)
答案 2 :(得分:3)
您应该公开继承base
。
class derived : public base {
public:
derived(int xx) : base(xx){
}
};
在非常特定的情况下使用私有继承,例如当两个类之间存在has-a
关系时,您还需要覆盖基类的成员。
答案 3 :(得分:1)
从课外,您只能访问公共基类的公共成员;使用class
关键字定义类时,默认情况下继承是私有的。
要使其可访问,您需要公共继承:
class derived : public base
^^^^^^
答案 4 :(得分:1)
尝试:
class derived : public base {
...
};
答案 5 :(得分:0)
使用公共继承:
class derived : public base {
...
};
或
将x设为私有而非公开,并使用以下代码:
class Base {
int x;
public:
Base (int xx) {
x = xx;
}
void display() {
cout << "x = " << x << endl;
}
};
class Derived : public Base {
public:
Derived (int xx) : Base (xx) {
}
};
int main() {
Derived d1(2);
Derived *d = new Derived(10);
d->display();
d1.display();
return 0;
}