操作符的過載

2021-07-04 16:07:18 字數 3084 閱讀 4937

最近在學習c++操作符過載知識點,為了更加深入的理解,就寫了一段小**實現了操作符<,<=,>,>=,>>,《的過載以及測試。下面是我寫的**:

class money ;

/*普通函式,將數字轉化成int型

*/int digit_to_int(char c);

void main()

out_stream.open("outfile.txt");

if(out_stream.fail())

//使用過載的輸入流輸入資料

in_stream >> amount >> amount1 >> amount2;

//測試過載操作符<、<=、>、>=

lower = amount1 < amount2;

lagre = amount1 > amount2;

lower_equal = amount1 <= amount2;

lagre_equal = amount1 >= amount2;

//測試過載操作符<<,將資料輸出到檔案

out_stream << amount << amount1 << amount2

<< "\ncopied from the file infile.txt"

<< "\n"

<< amount.percent(10) << amount1.percent(100) << amount2.percent(1);

//將資料輸出到螢幕

cout

<< amount << amount1 << amount2

<< "\ncopied from the file infile.txt"

<< "\n"

<< amount.percent(10) << amount1.percent(100) << amount2.percent(1)

<< "\n"

<< lower << lagre << lower_equal << lagre_equal;

//關閉輸入、輸出流

in_stream.close();

out_stream.close();}/*

類money的友元函式,過載操作符》的函式定義;

函式有兩個引數,第乙個引數是輸入流型別的引用,第二個引數是類money型別的引用;

返回值輸入流型別的引用。

*/

istream& operator >> (istream& ins, money& amount)

else

ins >> dollars >> decimal_point >> digit1 >>digit2;

if(one_char != '$' || decimal_point != '.' || !isdigit(digit1) || !isdigit(digit2))

cents = digit_to_int(digit1)*10 + digit_to_int(digit2);

all_cents = dollars*100 + cents;

amount.set_all_cents(all_cents);

if(negative)

return ins;

}int digit_to_int(char c)

/*類money的友元函式,過載操作符《的函式定義;

函式有兩個引數,第乙個引數是輸出流型別的引用,第二個引數是類money型別的引用;

返回值輸入流型別的引用。

*/

ostream& operator

<< (ostream& outs, money& amount)

money::money(long dollars) : all_cents(dollars*100)

money::money() : all_cents(0)

/*類money的成員函式定義,函式無引數,返回double型別的賬戶餘額值。

*/double money:: get_value() const

/*類money的成員函式定義,函式無引數,返回long型別的賬戶餘額的總美分值。

*/long money:: get_all_cents() const

/*類money的成員函式定義,函式有乙個引數,為long型別的賬戶餘額的總美分值,函式實現成員變數的賦值。

*/void money:: set_all_cents(long allcents)

/*類money的成員函式定義,函式有乙個引數,為int型別,返回乙個類money型別的資料;

函式實現物件中餘額的百分比。

*/money money:: percent(int percent_figure) const

/*類money的友元函式,操作符《的函式定義,函式有兩個常量引數,為類money型別的引用,返回乙個bool型別的值;

*/bool

operator

< (const money& amount1, const money& amount2)

/*類money的友元函式,操作符<=的函式定義,函式有兩個常量引數,為類money型別的引用,返回乙個bool型別的值;

*/bool

operator

<= (const money& amount1, const money& amount2)

/*類money的友元函式,操作符》的函式定義,函式有兩個常量引數,為類money型別的引用,返回乙個bool型別的值;

*/bool

operator > (const money& amount1, const money& amount2)

/*類money的友元函式,操作符》=的函式定義,函式有兩個常量引數,為類money型別的引用,返回乙個bool型別的值;

*/bool

operator >= (const money& amount1, const money& amount2)

由於我用的事vc++ 6.0的編輯器,在實現操作符》,《的過載時,總是提示不能訪問類的私有成員變數。但是我已經把操作符宣告為類的友元函式,按照c++操作符過載的語法,是可以訪問的,可能因為編輯器的原因,所以我寫了兩個類的成員函式,用來獲取私有成員變數和賦值。

操作符過載

ifndef vertex h define vertex h class vertex vertex float px float py float pz vertex operator const vertex p vertex operator const vertex p void oper...

操作符過載

1.操作符是靜態方法,返回值表示操作結果,引數是運算元。2.操作符過載需要在過載的操作符前加上operator關鍵字。3.最好少用操作符過載,只有在意義明晰而且與內建類的操作一致時才適合使用,以免造成混亂。以建立的分數類 fraction 中的 為例,該分數類中有兩個int型的私有屬性 分子 num...

過載操作符

1.過載操作符1.1 限制過載操作符具有以下限制 1 只有c 預定義的操作符集中的操作符才可以被過載 2 對於內建型別的操作符,它的預定義不能被改變,應不能為內建型別過載操作符,如,不能改變int型的操作符 的含義 3 也不能為內建的資料型別定義其它的操作符 4 只能過載類型別或列舉型別的操作符 5...