2011-03-19 64 views
3

我在這裏有兩個類。一個基類:在派生類中重載比較運算符右私有繼承

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;} 
    } 
}; 

我知道如何來比較的兩個實例:我只是成員變量彼此。但是,我怎麼可能比較B的實例呢?兩個實例很容易在其關聯的「A」實例中擁有不同的「x」成員,但我不知道如何將這些實例相互比較。

回答

3

,就可以把實例A&,並使用等號操作class A

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

韋爾普,我認爲這是一件簡單的那樣! – 2011-03-19 01:59:48

+3

您應該投射到'A&'以避免構建臨時的'A'對象。 – 2011-03-19 02:45:19

+0

@Mark:感謝您的支持! – Jon 2011-03-19 02:57:09