从父 class 调用基 class 重载运算符

Call base class overloaded operator from parent class

在下面的简单结构中,p3继承自p2。

struct p2 {
    double x, y;
    p2(double x, double y) : x(x),y(y){}
    bool operator ==(const p2& b) const{ return x == b.x && y == b.y; }
    bool operator !=(const p2& b) const{ return !(*this == b); }
};

struct p3 : p2 {
    double z;
    p3(double x, double y, double z) : p2(x,y),z(z){}
    bool operator ==(const p3& b) const{ return x == b.x && y == b.y && z == b.z; }
    bool operator !=(const p3& b) const{ return !(*this == b); }
};

在 p3 的重载比较运算符中,如何用父 class 对重载运算符的调用替换 x == b.x && y == b.y 部分?

bool operator==(const p3& b) const
{
    return p2::operator==(b) && z == b.z; 
    //     ~~~~~~~~~~~~~~~~^
} 

只需在派生结构中使用作用域运算符::

所以在结构 p3 中的 operator==() 看起来像这样:

bool operator==(const p3& b) const {
    return p2::operator==(b) && z == b.z;
}