zoukankan      html  css  js  c++  java
  • 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; }
  • 相关阅读:
    【web安全】浅谈web安全之XSS
    【css】浅谈BFC
    nodejs笔记一--模块,全局process对象;
    逼真打字机效果;
    深入理解CSS3 animation的steps
    网址链接收藏
    用hoverclock插件实现HTML5时钟
    JS多种方法实现随机颜色;
    canvas实现跟随鼠标旋转的箭头
    封装insertAfter、addClass、格式化时间
  • 原文地址:https://www.cnblogs.com/cygalaxy/p/7050247.html
Copyright © 2011-2022 走看看