受保护成员与重载运算符冲突

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 的实例 - 因此禁止访问。以下将编译正常,因为现在 objDerived

class Derived : public Base {
public:
    bool operator==(const Derived& obj) const {
        return myint == obj.myint;
    }
};