受保护成员与重载运算符冲突
Protected member conflict with overloading operator
我有以下 classes:
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
is protected within this context
我认为在 public 继承下派生的 class 可以访问受保护的变量。是什么导致了这个错误?
Derived
只能在 Derived
的所有实例上访问 Base
的受保护成员。但是 obj
不是 Derived
的实例,它是 Base
的实例 - 因此禁止访问。以下将编译正常,因为现在 obj
是 Derived
class Derived : public Base {
public:
bool operator==(const Derived& obj) const {
return myint == obj.myint;
}
};
我有以下 classes:
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
is protected within this context
我认为在 public 继承下派生的 class 可以访问受保护的变量。是什么导致了这个错误?
Derived
只能在 Derived
的所有实例上访问 Base
的受保护成员。但是 obj
不是 Derived
的实例,它是 Base
的实例 - 因此禁止访问。以下将编译正常,因为现在 obj
是 Derived
class Derived : public Base {
public:
bool operator==(const Derived& obj) const {
return myint == obj.myint;
}
};