2011-03-19 10 views
3

ここでは2つのクラスがあります。基本クラス:派生クラスの比較演算子のオーバーロード右のプライベート継承

class A 
{ 
    int x; 
public: 
    A(int n):x(n){} 

    friend bool operator==(const A& left, const A& right) 
    {return left.x==right.x;} 
}; 

や個人から継承する派生クラス:お互いに、私はちょうどメンバ変数:

class B : private A 
{ 
    int y; 
public: 
    B(int n,int x):A(x),y(n){} 
    friend bool operator==(const B& left, const B& right) 
    { 
     if(left.y==right.y) 
     {/*do something here...*/} 
     else{return false;} 
    } 
}; 

私はAの2つのインスタンスを比較する方法を知っています。しかし、私はBのインスタンスをどのように比較することができますか? 2つのインスタンスは、関連する "A"インスタンス内に異なる "x"メンバーを簡単に持つことができますが、これらのインスタンスを互いにどのように比較するかはわかりません。

答えて

3

あなたはA&にインスタンスをキャストしclass Aのための等価演算子を使用することができます。

if (static_cast<A&>(left) == static_cast<A&>(right)) { 
    // ... 
} 
+0

welp、私はそれがそのような単純なものだったと仮定しました! –

+3

一時的な 'A'オブジェクトの構築を避けるには、' A& 'にキャストする必要があります。 –

+0

@マーク:それをキャッチしてくれてありがとう! – Jon

関連する問題