2011-08-31 49 views
3

有一个基类和一个派生类。派生公共继承基础。基类实现了一个友元函数bool operator ==(const Base & lhs,const Base & rhs)const; 我正在实现派生类,它也需要实现布尔运算符==(const Derive & lhs,const Derive & rhs)const;现在我的问题是,我不知道如何在我的operator ==函数中调用父母的operator ==函数。 Base类的operator ==不属于base,所以我不能简单地使用Base :: operator ==。谢谢。C++如何调用父母的朋友函数?

+2

如果您发布一些(伪)代码,而不是尝试描述您的代码,那么您的问题可能会更清晰。 –

+1

另外,如果你有一个免费的'operator ==()',那么说“基类已经实现它”没有意义。 –

回答

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。如果基类必须具有可比性,则可能需要设置虚拟比较机制。

+0

谢谢。它现在编译。 – user875367