派生関数には親演算子と同じシグネチャがないため、親の比較をオーバーライドするのではなく非表示にします。これは、左側の引数の静的タイプが呼び出される関数を決定するため、とにかく仮想性を利用できないことを意味します。
そのため、仮想比較の通常のメソッドは、基本クラスの仮想比較関数にディスパッチする非メンバーの等式演算子です。
代わりに使用できる代替設計があるのは設計臭かもしれないので、仮想比較の特定の必要性を考慮してください。
また、メンバー比較(この場合は等式)演算子は通常、である必要があることに注意してくださいconst。
編集:あなたは左側の引数の静的なタイプに基づいた比較だけを気にするかもしれないようです、それはより簡単な問題であるはずです。この場合、左側の引数が暗黙的にまたは継承以外のメカニズム(変換演算子または変換コンストラクター)によって変換される型である場合を除いて、コードはすべての場合を処理しBaseますDerived。これらのケースを気にしないのであれば、メンバーの平等は問題ありません。
最後に、比較が完全にパブリックインターフェイスを介して実行できる場合、演算子であるかどうかに関係なく、(ほとんど)非メンバー、非フレンド関数を常に優先します。
EDIT2(非会員、非友人の非常に簡単な概要):
たとえば、クラスにpublickeyメソッドがあり、2つのインスタンスのキーが等しい場合は、オブジェクトをequalと呼びます。次に、友達やメンバーの等式演算子を使用せずに、スタンドアロンで等式を記述できます。
bool operator==(const MyType& left, const MyType& right)
{
return left.key() == right.key();
}