2012-07-02 179 views
0

另一個階級的使用是有什麼辦法超載>(大於)運算符,能夠做這樣的事情:重載運營商在C++

myClass *a = new myClass(1); 
myClass *b = new myClass(3); 

if(a > b) //it should compare the int values from the constructors 
    //do something 

我試着重載運營商,但有各種錯誤。我正在使用VC++。

+0

這是不可能重載運營商,其中兩個參數是原始類型。指針是原始類型。 –

+0

也許你的意思是:'if(* a> * b)' – Gigi

+0

如果你使用對象而不是指針。 PS在這個例子中沒有必要使用指針。 –

回答

2

你不能重載運算符指針,因爲它們是基本類型(並且你不能在兩個參數都是基本類型的情況下創建重載)。相反,你可以重載運營商爲用戶定義類型的對象(不是指針他們):

class myClass 
{ 
    // ... 
public: 
    bool operator>(const myClass & right) const 
    { 
     return this->whatever()>right.whatever(); 
    } 
}; 

myClass *a = new myClass(1); 
myClass *b = new myClass(3); 

if(*a > *b) //it should compare the int values from the constructors 
    //do something 

通知,如果你沒有一個特別的理由在堆中分配的東西,它是多最好只爲它分配堆棧:

myClass a(1); 
myClass b(3); 
if(a > b) 
    // do something 
+0

好的,但我仍然得到這個錯誤(Persoana是MyClass):'錯誤C2679:binary'>':找不到操作符'const Persoana'類型的右側操作數(或沒有可接受的轉換) (Persoana *,const Persoana)' –

+2

@Eduard:這意味着你正在比較一個'參數列表',它可能是'內置的C++操作符'(Persoana *,Persoana *)' 1> Persoana「和」Persoana *「 - 都不應該是一個指針。 – ildjarn

+0

得到它的工作。它來自一個頭文件,我沒有寫,它使用我的類作爲模板,並有一個指向它的指針。太感謝了! –

2

嘗試

class MyClass 
{ 
    int value; 
    public: 
     bool operator>(MyClass const& rhs) const 
     { 
      return value > rhs.value; 
     } 

     MyClass(int v):value(v){} 

}; 

int main() 
{ 
    MyClass a(1); 
    MyClass b(3); 

    if (a > b) { PLOP } else { POOP } 
}