考虑以下代码,它试图从派生类运算符中调用基类比较运算符:
struct Base
{
protected:
int _a;
bool operator == ( const Base& other ) const
{
return (_a == other._a);
}
};
struct Derived : public Base
{
bool operator == ( const Derived& other ) const
{
return static_cast<Base>(*this) == static_cast<Base>(other);
}
};
int main()
{
Derived b1, b2;
if( b1 == b2 )
;
}
出现以下错误:
main.cpp:25:61: error: 'bool Base::operator==(const Base&)' is protected within this context return static_cast(*this) == static_cast(other);
我不明白为什么不能从派生类中访问此运算符。
在提问之前,我进行了一些搜索,并找到这个问题,看起来很相似。但是:
- 在其他问题中,OP想要比较(派生类中的)基类对象,而我需要相同类型对象的比较。
- 我不理解给出的解释。
- 情况略有不同:在另一个问题中,接受的答案建议在派生类中对基本成员进行比较。如果我必须在基类中进行比较怎么办?
关于第2点,让我详细说明一下:@Barry所接受的答案认为,由于对象被转换为基类,因此不能访问基类的成员!为什么呢?这对我来说不清楚。
能否有人清楚地解释一下这里的情况(并可能提供解决方案...)?
如果您觉得可能有其他问题澄清了这种情况,请链接到它(我找不到)。