c++--运算符重载

第14章 重载运算与类型转换

 1 class Sales_data
 2 {
 3     /*重载<<和+运算符*/
 4     friend ostream& operator<<(ostream &os,const Sales_data &item);
 5     //friend Sales_data operator+(const Sales_data &lhs,const Sales_data &rhs);
 6 public:
 7     /*重载+=*/
 8     Sales_data& operator+=(const Sales_data &rhs);
 9     /*成员重载+*/
10     //Sales_data operator+(const Sales_data& rhs);
11 
12     /*拷贝构造函数和拷贝赋值运算符(注意区别重载赋值运算符)*/
13     Sales_data(const Sales_data&);
14     Sales_data& operator=(const Sales_data &rhs);
15 
16     /*构造函数*/
17     Sales_data()=default;
18     Sales_data(int l,int r):units_sold(l),revenue(r){}
19 private:
20     int units_sold;
21     int revenue;
22 };
23 
24 /*友元外部声明*/
25 ostream& operator<<(ostream &os,const Sales_data &item);
26 //Sales_data operator+(const Sales_data &rhs,Sales_data &lhs);  一句声明错,导致一个小时调试
27 
28 /*拷贝构造函数和拷贝赋值运算符*/
29 Sales_data::Sales_data(const Sales_data &items)
30 {
31     units_sold=items.units_sold;
32     revenue=items.revenue;
33 }
34 Sales_data& Sales_data::operator=(const Sales_data &rhs)
35 {
36     if(this!=&rhs)
37     {
38         //free();   //如果类Sales_data中包含需要手动释放的成员,则需要先“释放当前内存”。
39         units_sold=rhs.units_sold;
40         revenue=rhs.revenue;
41     }
42     return *this;
43 }
44 
45 /*非成员,重载+*/
46 Sales_data operator+(const Sales_data &lhs,const Sales_data& rhs)
47 {
48     Sales_data sum=lhs;  //把lhs拷贝给sum
49     sum += rhs;
50     //sum.units_sold=lhs.units_sold+rhs.units_sold;
51     //sum.revenue=lhs.revenue+rhs.revenue;
52     return sum;        //返回拷贝
53 }
54 
55 /*成员,重载+=*/
56 Sales_data& Sales_data::operator+=(const Sales_data &rhs)
57 {
58     //cout<<"+="<<endl;
59     units_sold+=rhs.units_sold;
60     revenue+=rhs.revenue;
61     return *this;
62 }
63 
64 /*友元定义,重载<<*/
65 ostream& operator<<(ostream &os,const Sales_data &item)
66 {
67     os<<item.units_sold<<" "<<item.revenue;
68     return os;
69 }
70 
71 //也可以成员重载+
72 /*
73 Sales_data Sales_data::operator+(const Sales_data& rhs)
74 {
75     Sales_data item=*this;
76     item += rhs;
77     //sum.units_sold=lhs.units_sold+rhs.units_sold;
78     //sum.revenue=lhs.revenue+rhs.revenue;
79     return item;        //返回拷贝
80 }
81 */
82 
83 //主函数
84 int main()
85 {
86     Sales_data lhs(10,1);
87     Sales_data rhs(20,2);
88     
89     //const Sales_data lhs(10,1);
90     //const Sales_data rhs(20,2);
91     Sales_data sum;
92 
93     sum=lhs+rhs;
94     cout<<sum<<endl;
95 
96     return 0;
97 }

 重载函数调用运算符:

class PrintString
{
public:
    PrintString(istream &in=cin):is(in){};
string operator()() //函数调用运算符重载 { string line; if(!getline(is,line)) //读取一行用getline { line=""; } return line; } private: istream &is; }; /*题意:从istream中读取一行输入,然后返回一个表示所读内容的string.如果读取失败,返回空string。*/ int main() { PrintString PS; string s=PS(); //调用“函数对象”,返回值赋值给s cout<<s<<endl; return 0; }
原文地址:https://www.cnblogs.com/cygalaxy/p/7050247.html