有一个Base类和一个Derive类。派生公共继承Base。基类实现了友元函数bool operator ==(const Base& lhs,const Base& rhs)const; 我正在实现Derive类,它还需要实现bool运算符==(const Derive& lhs,const Derive& rhs)const;现在我的问题是我不知道如何在我的operator ==函数中调用parent的operator ==函数。 operator ==对于Base类剂量不属于base,所以我不能简单地使用Base :: operator ==。谢谢。
答案 0 :(得分:5)
绑定对Base
子对象的引用,并将它们与普通的运算符语法进行比较。一个例子:
class Base { /*...*/ };
bool operator==(const Base&, const Base&);
class Derive : public Base
{
friend bool operator==(const Derive&, const Derive&);
private:
int mem_;
};
bool operator==(const Derive& d1, const Derive& d2)
{
return static_cast<const Base&>(d1) == static_cast<const Base&>(d2)
&& d1.mem_ == d2.mem_;
}
警告:如果您不小心将Base
与Derive
进行比较,此类设置会自动切片。如果基类必须具有可比性,则可能需要设置虚拟比较机制。