c++--运算符重载
生活随笔
收集整理的這篇文章主要介紹了
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(); //調用“函數對象”,返回值賦值給scout<<s<<endl; return 0; }
?
轉載于:https://www.cnblogs.com/cygalaxy/p/7050247.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的c++--运算符重载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP封装curd,CURD · Too
- 下一篇: Effective C++ 条款21