我有以下课程:
class Base {
protected:
int myint;
};
class Derived : public Base {
public:
bool operator==(Base &obj) {
if(myint == obj.myint)
return true;
else
return false;
}
};
但是当我编译它时,会出现以下错误:
int Base::myint
在此上下文中受到保护
我认为可以在公共继承下从派生类访问受保护的变量。导致此错误的原因是什么?
答案 0 :(得分:7)
Derived
只能在Base
的所有实例上访问Derived
的受保护成员。但obj
不是Derived
的实例,而是Base
的实例 - 因此禁止访问。以下编译正常,因为现在obj
是Derived
class Derived : public Base {
public:
bool operator==(const Derived& obj) const {
return myint == obj.myint;
}
};