【发布时间】:2019-09-02 14:14:11
【问题描述】:
考虑这段代码,它试图从派生类运算符中调用基类比较运算符:
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: 错误:'bool Base::operator==(const Base&)' 在此上下文中受到保护 return static_cast(*this) == static_cast(other);
我不明白为什么我不能从派生类访问这个运算符。
我在询问之前做了一些搜索,发现 this other question 看起来很相似。然而:
- 在另一个问题中,当我需要比较相同类型的对象时,OP 希望将(派生类)与基类对象进行比较。
- 我不明白给出的解释。
- 情况有点不同:在另一个问题中,接受的答案建议对派生类中的基成员进行比较。如果我必须在基类中进行比较怎么办?
关于第 2 点,让我详细说明:@Barry 的 accepted answer 建议将对象转换为基类......所以它不能访问基类的成员!这是为什么 ?我不清楚。
有人可以对这里的情况给出一个清晰的解释(并可能提供解决方案......)吗?
如果您觉得某处可能有其他问题可以澄清这种情况,请链接到它(我找不到)。
【问题讨论】:
标签: c++ c++11 inheritance operators