我在理解這個概念時遇到了一些問題。在main.cpp中的文件,我們有一個功能如下:在超載C++運算符時遇到問題
void TestComparison()
{
MyFloat X, Y;
cout << "\n\n============ Testing \"==\" for MyFloat ================\n";
do
{
cout << "\nEnter X ==> ";
X.Read();
cin.ignore(1000, '\n'); // Discard all chars in input stream.
cout << "\nEnter Y ==> ";
Y.Read();
cin.ignore(1000, '\n'); // Discard all chars in input stream.
cout << "\n\n";
if (X == Y)
{
X.Write(); cout << " is equal to "; Y.Write();
}
else
{
X.Write(); cout << " is NOT equal to "; Y.Write();
}
}
while (SpaceBarToContinue());
}
這是我寫的類:
class MyFloat
{
enum {MAXDIGIT=20};
char Number[MAXDIGIT+1];
char NumberOfDigits;
public:
friend void AssignValue(MyFloat& X);//remove after the program works
MyFloat();
int Digits();
int MaxDigits();
void Read();
void Write();
MyFloat operator + (MyFloat x);
int operator== (MyFloat x);
};
這裏是我的==過載保護功能存根:
int MyFloat::operator== (MyFloat x)
{
int Flag=0;
return 1;
}
這樣做的唯一目的是比較兩個對象X和Y的數組。它們被傳遞給==重載函數。我應該編寫比較它們的算法。我知道如何編寫比較這兩個字符數組的算法,那不是問題,但我不明白的是X和Y如何進入重載函數來比較它們?主要代碼(X == Y)
用於獲得0或1. X和Y如何傳入函數?
舉例來說,我會承擔我的函數存根需要用2個參數被改寫:
int MyFloat::operator== (MyFloat x, MyFloat y)
{
int Flag=0;
return 1;
}
但這樣做的(X == Y)
函數調用在此產生一個錯誤,回到主各國「超載「 operator ==「必須是一個二元運算符(有3個參數)'
所以我完全困惑於如何將MyFloat的兩個對象放入函數中來比較它們。我對編程還很陌生(5-6個月的學習),任何簡單明瞭的答案都將不勝感激。
'==操作符'真的應該返回'bool',而不是'int'。 – PaulMcKenzie
[重載'運算符+'的可能重複必須是一元運算符或二元運算符錯誤](http://stackoverflow.com/questions/13554320/overloaded-operator-must-be-a-unary-or-binary-operator-error ) – FredMaggiowski
看看這個答案:http://stackoverflow.com/questions/13554320/overloaded-operator-must-be-a-unary-or-binary-operator-error 你已經聲明該操作符爲一個類成員,因此它接受一個隱式成員。你應該實現它作爲類的非成員MyFloat – FredMaggiowski