第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++--运算符重载相关推荐

  1. c++重载(以运算符重载为主)

    重载(OverLoading)是面向对象程序设计多态性的一种体现.所谓重载,是指"同一标识符"在同一作用域的不同场合具有不同的语义,这个标识符可以是函数名或运算符.也就是说,重载可 ...

  2. groovy–运算符重载

    Groovy支持运算符重载,各种运算符被映射到普通的java对象的方法调用,这就使得开发者可以利用运算符重载的优势来编写自己的Java或者groovy对象. 下面的表格描述了groovy中的操作符所映 ...

  3. c++运算符重载总结

    c++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程序更加简洁.高效.在c++中不止函数可以重载,运算符也可以重载.由于一般数据类型间的运算符没有重载的必要, ...

  4. c++重载运算符_C/C++编程笔记:运算符重载丨重载C++中的New和Delete运算符

    new和delete运算符也可以像C ++中的其他运算符一样重载.New和Delete运算符可以全局重载,也可以在特定类中重载. (1)如果使用某个类的成员函数来重载这些运算符,则意味着这些运算符仅针 ...

  5. C++运算符重载形式--成员函数or友元函数?

    1.C++操作符重载形式-成员函数or友元函数 1.对运算符重载,需要坚持四项基本原则: 不可臆造运算符: 运算符原有操作数的个数.优先级和结合性不能改变: 操作数中至少一个是自定义类型: 保持重载运 ...

  6. C++中运算符重载需要遵循的规则

    一.C++中运算符重载需要遵循的规则 1.并不是所有的运算符都可以重载.能够重载的运算符包括: + - * / % ^ & | ~ ! = < > += -= *= /= %= ^ ...

  7. C++中的运算符重载基础

    1.C++中的运算符重载基础 所谓重载,就是赋予新的含义.函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作.运算符重载(Operator Ov ...

  8. C++中的运算符重载

    1.Cpp中的重载运算符和重载函数 C++允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载.重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但 ...

  9. C++搞懂深拷贝初始化=与赋值(运算符重载)=的区别

    C++搞懂深拷贝初始化=与赋值(运算符重载)=的区别 C++构造函数用=与()不完全一样,注意使用=时c++中临时变量不能作为非const的引用参数,不论是=运算符重载还是构造函数,否则可能出现以下错 ...

  10. C++——运算符重载operator

    C++--运算符重载operator C++ prime plus第11章,运算符重载是C++的一种多态.运算符重载格式如下: operator运算符(argument-list) 1.做普通函数重载 ...

最新文章

  1. 几种机器学习算法的偏差以及防范
  2. 大数据可视化软件//完美的SCI配图
  3. 【leetcode】
  4. magento网站建设_外贸网站建设指南,告诉你建站系统怎么选择
  5. 如何破解Synplify Pro 9.6.2? (SOC) (Synplify)
  6. JasperReports JSF插件用例系列
  7. HTML5 上传图片预览
  8. 终于弄懂KMP算法了
  9. 京东排行第一,近 4 万好评,这本 Python 书究竟好在哪?
  10. 985 211 PHP,你们要的985、211高校官方报录比汇总来了
  11. markdown语言练习
  12. 两种方法,word文件转换成PDF文件
  13. oracle excel vba6,如何在WPS个人Excel表格中启用宏功能来使用VBA
  14. 笔记本电脑连接无线局域网怎么设置?
  15. GitHub Star 13.9k,顶级项目全新开源表格识别算法
  16. 计算机职业访谈ppt,大学职业生涯人物访谈.ppt
  17. git stash 暂存恢复和文件误删恢复
  18. 神经网络滤镜是啥功能,神经网络滤镜不能用
  19. sipp介绍与脚本撰写(一)
  20. 零基础通过Ajax实现网易云音乐数据交互(4)

热门文章

  1. Java中遍历HashMap的5种方式
  2. Windows SDK笔记(三):定制控件消息处理函数
  3. 断言assert使用方法
  4. VMware 虚拟机占用磁盘空间
  5. linux内核源代码分析----内核基础设施之klist
  6. [react] 使用ES6的class定义的组件不支持mixins了,那用什么可以替代呢?
  7. 前端学习(3275):js中this的使用四
  8. [html] a标签的默认事件禁用后,如何实现跳转?
  9. [vue] 开发过程中有使用过devtools吗?
  10. [vue] v-if和v-for的优先级是什么?如果这两个同时出现时,那应该怎么优化才能得到更好的性能?