无法使用子类变量访问超类公共成员

Can't acces super class public members with sub class variable

本文关键字:超类 成员 访问 类变量      更新时间:2023-10-16

所以如果我有以下类Super:

class Super {
public:
string member = "bla bla";
void doSth() { cout << member; }
};

还有一个继承 Super 的类 Sub:

class Sub : Super {
public:
string member2 = "bla bla 2";
};

比,当我有一个Sub对象时,我无法联系到Super的成员,甚至认为他们是公开的。

using namespace std;
int main(){
Sub sub;
cout << sub.member2 << endl;
cout << sub.member << endl; // error: public Super::member is inaccessible 
sub.doSth(); // error: public Super::doSth() is inaccessible 
}

但是,如果它们是公开的,为什么呢?还是我做错了什么?

您私下继承Super。 如果不提及继承的访问级别,这是C++中classes 的默认值。 但是,请注意,struct的默认值设置为public

将代码更改为

class Sub : public Super {
public:
string member2 = "bla bla 2";
};

然后member将可见