练习14.1:

区别:一些运算符的重载版本无法保留内置运算符的短路求值属性,或者无法保留内置运算符的求值顺序规则。重载的运算符函数至少含有一个类类型的参数

一致:重载运算符函数的参数数量与该运算符内置版本作用的运算对象一样多。对于一个重载的运算符来说,其优先级和结合律与对应的内置运算符保持一致

练习14.2:

#include <iostream>
#include <string>
#include <errno.h>
using namespace std;class Sales_date {//将非成员重载函数设置为友元函数friend Sales_date operator+(const Sales_date& h1, const Sales_date& h2);friend istream& operator >> (istream& is, Sales_date& item);friend ostream& operator << (ostream& os, const Sales_date& item);
public://默认构造函数Sales_date():bookNo(std::string()){ }Sales_date(const std::string& s, unsigned us, double p):bookNo(s), units_sold(us), revenue(p*us) { }Sales_date(const std::string& s) :bookNo(s) { }//拷贝构造函数Sales_date(const Sales_date& s):bookNo(s.bookNo), units_sold(s.units_sold), revenue(s.revenue){ }//拷贝赋值运算符Sales_date& operator=(const Sales_date&);//复合赋值运算符Sales_date& operator+=(const Sales_date&);//得到bookNostd::string isbn()const { return bookNo; }private://平均售价double avg_price()const { return units_sold ? revenue / units_sold : 0; }std::string bookNo;unsigned units_sold = 0;double revenue = 0.0;
};//拷贝赋值运算符
Sales_date& Sales_date::operator=(const Sales_date& s)
{bookNo = s.bookNo;units_sold = s.units_sold;revenue = s.revenue;return *this;
}//复合赋值运算符
Sales_date& Sales_date::operator+=(const Sales_date& s)
{if (this->bookNo == s.bookNo){units_sold = units_sold + s.units_sold;revenue = revenue + s.revenue;return *this;}else{throw runtime_error("bookNo is different");}
}//重载的加法运算符
Sales_date operator+(const Sales_date& h1, const Sales_date& h2)
{if (h1.bookNo == h2.bookNo){Sales_date sTemp = h1;sTemp.units_sold = sTemp.units_sold + h2.units_sold;sTemp.revenue = sTemp.revenue + h2.revenue;return sTemp;}else{//无法相加throw runtime_error("bookNo is different");}}//重载输入运算符
istream& operator >> (istream& is, Sales_date& item)
{double price;is >> item.bookNo >> item.units_sold >> price;//检查输入是否出错if (is){item.revenue = item.units_sold * price;}else{//输入失败,对象被赋予默认的状态item = Sales_date();}return is;
}//重载输出运算符
ostream& operator << (ostream& os, const Sales_date& item)
{os << item.isbn() << " " << item.units_sold << " " << item.revenue << " " << item.avg_price();return os;
}int main()
{system("pause");return 0;
}

练习14.3:

(a):内置类型的==运算符,比较两个指针指向的内容

(b):string版本重载的==

(c):vector版本重载的==

(d):此处书上左边的变量多了一个”,去除,使用的是string版本重载的==,右边的字面值字符串被转换为string类型

练习14.4:

%一般定义为非成员函数

%=改变对象状态,一般定义为成员函数

++会改变对象状态,一般定义为成员函数

->必须定义为成员函数

<<必须定义为非成员函数

&&是对称性的运算符,一般定义为非成员函数

==是对称性的运算符,一般定义为非成员函数

()必须定义为成员函数

练习14.5:

略,与Sales_Date的重载运算符的编写一样

C++Premier14.1节练习相关推荐

  1. 第十六节,使用函数封装库tf.contrib.layers

    目录 一 tf.contrib.layers中的具体函数介绍 1.tf.contrib.layers.conv2d()函数的定义如下: 2.tf.contrib.layers.max_pool2d() ...

  2. 第五节 RabbitMQ在C#端的应用-消息收发

    原文:第五节 RabbitMQ在C#端的应用-消息收发 版权声明:未经本人同意,不得转载该文章,谢谢 https://blog.csdn.net/phocus1/article/details/873 ...

  3. 第2节 mapreduce深入学习:4, 5

    第2节 mapreduce深入学习:4.mapreduce的序列化以及自定义排序 序列化(Serialization)是指把结构化对象转化为字节流. 反序列化(Deserialization)是序列化 ...

  4. 光棍节程序员闯关秀(总共10关)

    程序员闯关大挑战: https://1111.segmentfault.com/ 仓鼠演示7k7k.4399小游戏: http://cdn.abowman.com/widgets/hamster/ha ...

  5. 欧拉函数求一个数倒数的循环节长度

    首先,费马小定理a与p互素,则a^(p-1)≡1(mod p)  对于一个素数p,取a=10,那么10^(p-1)≡1(mod p)  如果找到一个正整数e使得10^e/p-1/p为整数,那么e就是1 ...

  6. 如何建立图像数据矩阵和图像显示灰度之间的关系!_放射技术考试第四章第一节 数字图像的特征...

    第四章第一节   数字图像的特征 一.模拟与数字 (一)模拟信号 在信息科学中,能够计数的离散量称为数字信号(整数),不能计数的连续量称为模拟信号. 模拟是以某种范畴的表达方式如实地反映另一种范畴.例 ...

  7. c++控制台应用每一列数据如何对齐_Python数据分析第五节 pandas入门

    这一节将开始学习python的一个核心数据分析支持库---pandas,它是python数据分析实践与实战的必备高级工具.对于使用 Python 进行数据分析来说,pandas 几乎是无人不知,无人不 ...

  8. 第四节 RabbitMQ在C#端的应用-客户端连接

    第四节 RabbitMQ在C#端的应用-客户端连接 原文:第四节 RabbitMQ在C#端的应用-客户端连接 版权声明:未经本人同意,不得转载该文章,谢谢 https://blog.csdn.net/ ...

  9. 软件构造 第二章 第一节 软件生命周期和版本控制

    软件构造第二章 第一节 软件生命周期和版本控制 基本内容 Software Development Lifecycle (SDLC) Traditional software process mode ...

最新文章

  1. 台式计算机无线设置,台式电脑怎么设置无线网络?
  2. Keil中RO-data、RW-data、ZI-data意义
  3. 解决Can 't connect to local MySQL server throug
  4. 解决eclipse + pydev 编译过程中有中文的问题
  5. 【HISI系列】之Hi3559A V100R001C02SPC010文档及SDK
  6. 01-操作数组的方法
  7. 2020 cr节目源_2020/8月最新IPTV M3U8直播源分享
  8. A Beautiful Song : Burning
  9. 2020ubc大学计算机硕士录取条件,2020Fall录取|研究牛校UA阿尔伯塔大学计算机硕士两年全奖!...
  10. swift 时间选择器第三方。公历转农历,农历转公历。
  11. cv/dl/cl领域的实验室官网/牛人主页/技术论坛/比赛数据库/好玩的东西
  12. Android Native 代码 Release 编译 - 隐藏符号表
  13. 引力魔方扣费方式是什么?引力魔方有什么功能?
  14. Fragment懒加载,上岸蚂蚁金服
  15. 腾讯手机管家ROOT功能分析
  16. 中国式焦虑,都是比出来的!
  17. PyQt5 designer 布局中组件尺大小、 位置设定
  18. 如何理解多变量函数的极限?
  19. 金弘同创教育:拼多多签到的规则是什么
  20. Pipeline(流水线)模式

热门文章

  1. 2016中国大数据大会成功举办 重磅发布年度大数据十大热词
  2. GitHub+HEXO博客更换主题
  3. RHEL7 网卡配置说明
  4. 【自己动手,打造自己的Wallpaper引擎(Win10/Win11)】
  5. drf-yasg 模块细节性说明(自定义请求体,自定义响应体,自定义响应Content-Type, 自定义文档接口标题)
  6. 2018年ERP的自我救赎
  7. U3D 2020 AssetStort(资源商店)项目导入
  8. tf2.0运行sess.run报错
  9. yolov5训练步骤及安全帽检测
  10. 安装Matplotlib