C++ 受保护成员与重载运算符冲突
我有以下课程:C++ 受保护成员与重载运算符冲突,c++,class,inheritance,protected,C++,Class,Inheritance,Protected,我有以下课程: class Base { protected: int myint; }; class Derived : public Base { public: bool operator==(Base &obj) { if(myint == obj.myint) return true; else return false; } }; 但当我编译它时,它会出
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
在此上下文中受保护
我认为受保护的变量可以从公共继承下的派生类访问。导致此错误的原因是什么?
Derived
只能在Derived
的所有实例上访问Base
的受保护成员。但是obj
不是Derived
的实例,它是Base
的实例,因此禁止访问。下面的代码可以编译,因为现在obj
是一个派生的
class Derived : public Base {
public:
bool operator==(const Derived& obj) const {
return myint == obj.myint;
}
};
尝试将
operator==
的参数从Base&
更改为Derived&
。(或派生常量&
,如果不需要修改它)