C ++如何调用父亲的朋友功能?

时间:2011-08-31 23:36:30

标签: c++ inheritance friend

有一个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 ==。谢谢。

1 个答案:

答案 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_;
}

警告:如果您不小心将BaseDerive进行比较,此类设置会自动切片。如果基类必须具有可比性,则可能需要设置虚拟比较机制。