• 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; }
  • 相关阅读:
    性能测试
    Oracle Install logs
    运维服务方案
    对字符串的查找,剪切,替换,提取(正则表达式)
    用java程序模拟网站的登录以及文件批量上传
    HDU_1542_(树状数组)
    HDU_3792_(素数筛+树状数组)
    Codeforces_791_B. Bear and Friendship Condition_(dfs)
    POJ_1125_(dijkstra)
    POJ_1088_(dp)(记忆化搜索)
  • 原文地址:https://www.cnblogs.com/cygalaxy/p/7050247.html
Copyright © 2020-2023  润新知