另一個階級的使用是有什麼辦法超載>
(大於)運算符,能夠做這樣的事情:重載運營商在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++。
另一個階級的使用是有什麼辦法超載>
(大於)運算符,能夠做這樣的事情:重載運營商在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++。
你不能重載運算符指針,因爲它們是基本類型(並且你不能在兩個參數都是基本類型的情況下創建重載)。相反,你可以重載運營商爲用戶定義類型的對象(不是指針他們):
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
好的,但我仍然得到這個錯誤(Persoana是MyClass):'錯誤C2679:binary'>':找不到操作符'const Persoana'類型的右側操作數(或沒有可接受的轉換) (Persoana *,const Persoana)' –
@Eduard:這意味着你正在比較一個'參數列表',它可能是'內置的C++操作符'(Persoana *,Persoana *)' 1> Persoana「和」Persoana *「 - 都不應該是一個指針。 – ildjarn
得到它的工作。它來自一個頭文件,我沒有寫,它使用我的類作爲模板,並有一個指向它的指針。太感謝了! –
嘗試
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 }
}
這是不可能重載運營商,其中兩個參數是原始類型。指針是原始類型。 –
也許你的意思是:'if(* a> * b)' – Gigi
如果你使用對象而不是指針。 PS在這個例子中沒有必要使用指針。 –