从派生类访问基类public成员

utv*_*are 4 c++ inheritance

是否可以从程序中某些其他位置的派生类实例访问基类公共成员.

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)

Bo *_*son 8

问题是你不小心在这里使用私有继承

class derived : base {
Run Code Online (Sandbox Code Playgroud)

这使得派生类中的所有基类成员都是私有的.

将此更改为

class derived : public base {
Run Code Online (Sandbox Code Playgroud)

它将按预期工作.


nog*_*ard 6

您从基类私下继承.您通常需要的是公共继承:

class derived : public base
Run Code Online (Sandbox Code Playgroud)

这是私有继承的常见问题.