編寫程式,完成以下功能:
1)定義表示金額的類money,有私有成員yuan、jiao、fen,分別代表元、角、分的值;
2)將+、-、*、/四個運算子過載為普通函式,然後宣告為money類的友元;
3)編寫main函式,測試money。
**如下:
1 #include2執行結果:using
namespace
std;
3 #include
4class money //
建立money類
5 ;16
17void money::optimize() //
money調整函式
1820
else
if(fen<0)
21if(jiao>=10)
22else
if(jiao<0)23}
2425
26 money::money(int y,int j,int
f)27
2829 money operator+(money a,money b) //
+ 運算子過載的類外定義
3038
39 money operator-(money a,money b) //
- 運算子過載的類外定義
4048
49 money operator*(money a,money b) //
* 運算子過載的類外定義
5058
59 money operator/(money a,money b) //
/運算子過載的類外定義
6068
69void money::display(string
str)
70 71
72int
main()
73
一開始我的money調整函式是這樣的:
void執行結果:money::optimize()
if(jiao>=10)
}
結果的第二行」角「居然出現了負數-20!什麼原因導致的呢?讓我們回到**分析。
主函式賦值中cost1(300,5,6)和cost2(105,7,6),發現5」角「<7」角「;再看給出的調整函式比較的是 if(fen>=10)和if(jiao>=10),發現問題:調整函式未考慮0怎麼解決呢?低位不夠就往高位借唄。計算過程是沒問題的,而且我們要的是結果,所以可以根據結果來修正。在原調整函式新增:
else if(fen<0)
//輸出結果」分「為負數時,向」角「借一位,」角「減1,分加10。
同理:else if(jiao<0)
//輸出結果」角「為負數時,向」元「借一位,」元「減1,角加10。
另外:dev c++及vc++2005以上編譯器執行結果正確,而vc++6.0下會報錯:
原因:vc++6.0編譯系統沒有完全實現c++標準,它所提供的不帶字尾".h"的標頭檔案不支援把雙目運算子過載為友元函式。但是它提供的帶字尾".h"的標頭檔案可以支援此功能。
解決方法:
法一:使用dev c++及vc++2005以上編譯器。
法二:將標頭檔案改為#include。
運算子過載函式作為類成員函式和友元函式
運算子過載函式既可以做為類成員函式也可以過載為友元函式,但使用定義方法和使用上是由較大差別的。首先看乙個運算子過載函式作為類成員函式的示例 定義complex為複數類,過載運算子 實現複數的相加。程式1.1 include using namespace std class complex comp...
10 2 運算子過載函式作為類成員函式和友元函式
complex operator complex c2 是雙目運算子,函式過載中只有乙個引數,實際上運算子過載函式有兩個引數,是由於過載函式是complex類中的成員函式,有乙個引數是隱含的,運算子函式是用this 指標隱士的訪問物件成員函式。complex operator complex thi...
C 運算子過載函式作為類成員函式和友元函式
例10.2中對運算子 進行了過載,使之能用於兩個複數的相加。在該例中運算子過載函式operator 作為complex類中的成員函式。可能有的讀者會提出這樣的問題 是雙目運算子,為什麼在例10.2程式中的過載函式中只有乙個引數呢?實際上,運算子過載函式有兩個引數,由於過載函式是complex類中的成...