以下是main.h的內容
1
#include <iostream>
2
#include <string>
3
using namespace std;
4
5
class Sales_item
6

{
7
public :
8
Sales_item(string s,int num1,float price1);
9
Sales_item();
10
~Sales_item()
{}
11
Sales_item& operator =(const Sales_item& s1);
12
Sales_item& operator += (Sales_item& s1);
13
friend ostream& operator<<(ostream& out,const Sales_item& s1);
14
friend istream& operator>>(istream& in,Sales_item& s1);
15
friend bool operator ==(Sales_item& s1,Sales_item& s2); //friend是與操作數相同的
16
friend bool operator !=(Sales_item& s1,Sales_item& s2);
17
friend Sales_item operator +(Sales_item& s1,Sales_item& s2);
18
friend Sales_item operator -(Sales_item& s1,Sales_item& s2);
19
private:
20
std::string isbn; //書目編號
21
int num; //書的數目
22
float total; //書的單價
23
};
24
25
Sales_item::Sales_item(string s, int num1, float price1)
26

{
27
isbn = s;
28
num= num1;
29
total = price1;
30
}
31
Sales_item::Sales_item()
32

{
33
isbn = ""; //賦值不同于初始化,這里是不能用括號初始化的
34
num = 0;
35
total = 0;
36
}
37
Sales_item& Sales_item::operator =(const Sales_item& s1) //類外部定義的時候總是沒有加限定符
38

{
39
this->isbn = s1.isbn;
40
this->num = s1.num;
41
this->total = s1.total;
42
return *this;
43
}
44
Sales_item& Sales_item::operator +=(Sales_item& s1)
45

{
46
this->isbn += s1.isbn;
47
this->num += s1.num;
48
this->total += s1.total;
49
return *this;
50
}
51
ostream& operator<<(ostream& out,const Sales_item& s1) //類的外部就不能在用friend不允許位于類定義之外
52

{
53
out << s1.isbn << "\t" << s1.num << "\t" << s1.total;
54
return out;
55
}
56
istream& operator>>(istream& in,Sales_item& s1)
57

{
58
double price;
59
in >> s1.isbn >> s1.num >> price;
60
if (in)
61
s1.total = s1.num * price;
62
else
63
s1 = Sales_item();
64
return in;
65
}
66
bool operator ==(Sales_item& s1,Sales_item& s2)
67

{
68
return s1.isbn==s2.isbn && s1.num==s2.num && s1.total==s2.total;
69
}
70
bool operator !=(Sales_item& s1,Sales_item& s2)
71

{
72
return (s1.isbn!=s2.isbn)|| (s1.num!=s2.num)|| (s1.total!=s2.total);
73
/**//*return !(s1==s2);*/
74
}
75
Sales_item operator +(Sales_item& s1,Sales_item& s2)
76

{
77
if (s1 == s2)
78
return Sales_item(s1.isbn,s1.num+s2.num,s1.total+s2.total);
79
else
80
return Sales_item();
81
}
82
Sales_item operator -(Sales_item& s1,Sales_item& s2)
83

{
84
if (s1 == s2)
85
return Sales_item(s1.isbn,s1.num-s2.num,s1.total-s2.total);
86
else
87
return Sales_item();
88
}
下面是main.cpp
:
1
#include <iostream>
2
#include "main.h"
3
using namespace std;
4
5
int main()
6

{
7
Sales_item s1,s2;
8
cin >> s1 >> s2;
9
cout << s1 << endl << s2 << endl;
10
if (s1 == s2)
11
{
12
cout << "equal" << endl;
13
cout << s1+s2 << endl;
14
}
15
if (s1 != s2)
16
cout << "not equal" << endl;
17
return 0;
18
}
當然,寫這個代碼的時候覺得很多問題都沒有考慮清楚,不過最后還是解決了問題:
1.在書寫過程中忘記了類型限定符。
2.細節問題。
3.函數的命名空間
現在我想說的是:
關于重載!=的時候遇到的問題,開始的時候我直接copy 了==的判斷,所以直接就改成了!=相&&得形式,可想而知結果肯定是錯誤的。
因為判斷不等于的時候,只要是一個不相等就不等,而如果用到了&&,那么即使有一個不等的話還是返回false,判定相等了,也就是
!=和==沒有成為一個全集,兩者不是互逆的關系。。
調試代碼的技巧很重要啊!!
posted on 2009-09-27 14:15
deercoder 閱讀(414)
評論(0) 編輯 收藏 引用 所屬分類:
C/C++