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

时间:2015-04-26 15:04:29

标签: 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;
    }
};

但是当我编译它时,会出现以下错误:

  

int Base::myint在此上下文中受到保护

我认为可以在公共继承下从派生类访问受保护的变量。导致此错误的原因是什么?

1 个答案:

答案 0 :(得分:7)

Derived只能在Base的所有实例上访问Derived的受保护成员。但obj不是Derived的实例,而是Base的实例 - 因此禁止访问。以下编译正常,因为现在objDerived

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