博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++primer 14.1节练习
阅读量:4601 次
发布时间:2019-06-09

本文共 2384 字,大约阅读时间需要 7 分钟。

练习14.1

重载运算符不保证操作数的求值顺序,例如对&&和||的重载版本不再具有“短路求值”的特性,两个操作数都要求值,而且不规定操作数的求值顺序。

相同点:

对于优先级和结合性级操作数的数目都不变。

练习14.2

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 8 using namespace std; 9 10 class Sales_data {11 friend istream& operator >> (istream& is, Sales_data &s);12 friend ostream& operator<<(ostream& os, Sales_data s);13 public:14 Sales_data() : bookNo("") {}15 Sales_data(string s, unsigned us, double up) : bookNo(s), units_sold(us), units_price(up) {}16 Sales_data operator+(const Sales_data& s);17 Sales_data& operator+=(const Sales_data& s);18 private:19 string bookNo;20 unsigned units_sold = 0;21 double units_price = 0;22 };23 24 istream& operator >> (istream& is, Sales_data &s);25 ostream& operator<<(ostream& os, Sales_data s);26 27 int main()28 {29 Sales_data s1;30 Sales_data s2("C++ primer", 10, 128.2);31 cout << s2 << endl;32 s1 = s2;33 cout << s1 << endl;34 cout << s1 + s2 << endl;35 s1 += s2;36 cout << s1 << endl;37 cin >> s1;38 cout << s1;39 cout << s1 + s2 << endl;40 system("pause");41 return 0;42 }43 44 istream & operator >> (istream & is, Sales_data &s)45 {46 is >> s.bookNo >> s.units_sold >> s.units_price;47 return is;48 // TODO: 在此处插入 return 语句49 }50 51 ostream & operator<<(ostream & os, Sales_data s)52 {53 os << s.bookNo << " " << s.units_sold << " " << s.units_price;54 return os;55 // TODO: 在此处插入 return 语句56 }57 58 Sales_data & Sales_data::operator+=(const Sales_data & s)59 {60 if (bookNo == s.bookNo)61 {62 units_sold = units_sold + s.units_sold;63 return *this;64 }65 else66 {67 cout << "can not add" << endl;68 return *this;69 }70 // TODO: 在此处插入 return 语句71 }72 73 Sales_data Sales_data::operator+(const Sales_data & s)74 {75 if (bookNo == s.bookNo)76 {77 Sales_data ss;78 ss.bookNo = bookNo;79 ss.units_price = units_price;80 ss.units_sold = units_sold + s.units_sold;81 return ss;82 }83 else84 {85 cout << "error" << endl;86 return *this;87 }88 // TODO: 在此处插入 return 语句89 }

练习14.3

a)内置版本,比较两个指针类型

b)string版本

c)vector版本

d)书上多了一个双引号,去掉的话是string版本

练习14.4

(a) %通常定义为非成员。

(b) %=通常定义为类成员,因为它会改变对象的状态。

(c) ++通常定义为类成员,因为它会改变对象的状态。

(d) ->必须定义为类成员,否则编译报错

(e) <<通常定义为非成员

(f) && 通常定义为非成员。

(g) ==通常定义为非成员。

(h) ()必须定义为类成员,否则编译会报错。

练习14.5

类似第二题,参考第二题代码

 

转载于:https://www.cnblogs.com/wuyinfenghappy/p/7491886.html

你可能感兴趣的文章
centos7 安装中文编码
查看>>
POJ - 3683 Priest John's Busiest Day
查看>>
正则表达式start(),end(),group()方法
查看>>
vuejs 学习旅程一
查看>>
javascript Date
查看>>
linux常用命令2
查看>>
狼图腾
查看>>
13、对象与类
查看>>
Sublime Text3 个人使用心得
查看>>
jquery 编程的最佳实践
查看>>
MeetMe
查看>>
IP报文格式及各字段意义
查看>>
(转载)rabbitmq与springboot的安装与集成
查看>>
C2. Power Transmission (Hard Edition)(线段相交)
查看>>
STM32F0使用LL库实现SHT70通讯
查看>>
Atitit. Xss 漏洞的原理and应用xss木马
查看>>
MySQL源码 数据结构array
查看>>
(文件过多时)删除目录下全部文件
查看>>
T-SQL函数总结
查看>>
python 序列:列表
查看>>