练习13.18

 1 #include <iostream>
 2 #include <string>
 3 #include <memory>
 4
 5 using namespace std;
 6
 7 static int i = 0;
 8
 9 class Employee {
10     friend ostream& print(ostream& os, const  Employee& emp);
11 public:
12     Employee() : empNames("周杰伦"), empNo(i++) {}
13     Employee(const string &name) : empNames(name), empNo(i++) {}
14 private:
15     string empNames;
16     int empNo;
17 };
18
19 ostream& print(ostream& os, const  Employee& emp);
20
21 int main()
22 {
23     Employee e1;
24     print(cout, e1);
25     Employee e2("吴亦凡");
26     print(cout, e2);
27     Employee e3("潘玮柏");
28     print(cout, e3);
29     system("pause");
30     return 0;
31 }
32
33 ostream & print(ostream & os, const Employee & emp)
34 {
35     os << "name: " << emp.empNames << " ID: " << emp.empNo << endl;
36     return os;
37     // TODO: 在此处插入 return 语句
38 }

练习13.19

需要,如果采用合成的拷贝控制,那么拷贝就是被拷贝成员的值,如果出现同名情况,就无法通过ID分辨两个人。

 1 #include <iostream>
 2 #include <string>
 3 #include <memory>
 4
 5 using namespace std;
 6
 7 static int i = 0;
 8
 9 class Employee {
10     friend ostream& print(ostream& os, const  Employee& emp);
11 public:
12     Employee() : empNames("周杰伦"), empNo(i++) {}
13     Employee(const string &name) : empNames(name), empNo(i++) {}
14     Employee(const Employee& emp) : empNames(emp.empNames), empNo(i++) {}
15     Employee &operator=(const Employee &emp);
16 private:
17     string empNames;
18     int empNo;
19 };
20
21 ostream& print(ostream& os, const  Employee& emp);
22
23 int main()
24 {
25     Employee e1;
26     print(cout, e1);
27     Employee e2("吴亦凡");
28     print(cout, e2);
29     Employee e3(e2);
30     print(cout, e3);
31     Employee e4 = e1;
32     print(cout, e4);
33     system("pause");
34     return 0;
35 }
36
37 ostream & print(ostream & os, const Employee & emp)
38 {
39     os << "name: " << emp.empNames << " ID: " << emp.empNo << endl;
40     return os;
41     // TODO: 在此处插入 return 语句
42 }
43
44 Employee & Employee::operator=(const Employee & emp)
45 {
46     empNames = emp.empNames;
47     empNo = i++;
48     return *this;
49     // TODO: 在此处插入 return 语句
50 }

练习13.20

由于我们没有给这两个类定义拷贝控制,所以一般情况下是编译器自己合成相关的拷贝控制,因为我们没有在这两个类中定义不可能拷贝、赋值或销毁类的成员,所以该类使用合成的,反之其合成的拷贝控制成员被定义为删除的。

练习13.21

在我看来这两个类也是没有必要去定义其拷贝控制成员的。

这两个类是配合使用对文本进行查询的,在程序设计的角度,拷贝操作没有必要。

对于不同的文本,或者不同的流只需要新创建类对象就可以了,无需复制操作。

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

C++primer 13.1.6节练习相关推荐

  1. C++primer 13.6.2节练习

    练习13.49 13.50 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #in ...

  2. 《C++ Primer》13.1.3节练习

    练习13.9: 析构函数完成与构造函数相反的工作:释放对象使用的资源,销毁非静态数据成员.从语法上看,它是类的一个成员函数,名字是波浪号接类名,没有返回值,也不接受参数. 当一个类没有定义析构函数时, ...

  3. 《C++ Primer》13.1.2节练习

    练习13.6: 拷贝赋值运算符本身是一个重载的赋值运算符,定义为类的成员函数,左侧运算对象绑定到隐含的this参数,而右侧运算对象是所属类类型的,作为函数的参数,函数返回指向其左侧运算对象的引用. 当 ...

  4. 《C++ Primer》13.1.1节练习

    练习13.1: 如果构造函数的第一个参数是自身类类型的引用,且所有其他参数(如果有的话)都有默认值,则此构造函数是拷贝构造函数.拷贝构造函数在以下几种情况下会被使用: ●拷贝初始化(用=定义变量). ...

  5. 《C++ Primer》13.1.6节练习(部分)

    练习13.18: #include <iostream> #include <string> using namespace std;class Employee {priva ...

  6. 《C++ Primer》13.1.4节练习

    练习13.14: 这是一个典型的应该定义拷贝控制成员的场合.如果不定义拷贝构造函数和拷贝赋值运算符,依赖合成的版本,则在拷贝构造和赋值时,会简单复制数据成员.对本问题来说,就是将序号简单复制给新对象. ...

  7. 【C++ Primer | 13】课后习题答案

    文章目录 13.1.4节目练习 13.2节练习 13.2.2练习 13.1.4节目练习 练习13.14 #include <iostream> using namespace std;cl ...

  8. C++primer 9.2.1节练习

    练习9.3 迭代器begin和end必须指向相同的容器,end可以与begin指向相同的位置,但不能指向begin之前的位置: 练习9.4 1 #include <iostream> 2 ...

  9. C++primer 10.2.1节练习

    练习10.3 1 #include<iostream> 2 #include<string> 3 #include<vector> 4 #include <s ...

最新文章

  1. css的background
  2. calendar 获取季度的第一天_Java日期查询:日、周、旬、月、季度、年等时间操作...
  3. WINDOWS渗透与提权总结(1)
  4. 【文字检测算法整理】
  5. 用 Hadoop 进行分布式并行编程, 第 1 部分 基本概念与安装部署
  6. Chapter12(动态内存)--C++Prime笔记
  7. 深圳 | 鹏程实验室研究员招收访问学生
  8. powershell自动化操作AD域、Exchange邮箱系列(6)——获取并监控内存、CPU占用率
  9. 基于机器视觉的电阻焊接质量检测
  10. Mysql中autocommit的用法
  11. 偶像dd_engi 的学习之路《转》
  12. SqlAlchemy操作(一)
  13. c语言标准库详解(一):stdio.h之文件操作
  14. hilife技术支持网站
  15. [MATLAB]最邻近插值法进行图像放大
  16. 【Python网络蜘蛛 · 8】:moviepy模块实现音频+视频的合成
  17. jQuery大法第五式--动画效果
  18. app中常见的测试点
  19. DEDE自动调用轮播图/幻灯片
  20. idea突然打不开了

热门文章

  1. 不同寻址方式的灵活应用——改变每个单词首字母大小写
  2. 故障解决:没有未桥接的主机网络适配器
  3. @RequestParam和@RequestBody的区别 (结合 Get/Post )
  4. 全局变量、成员变量、类变量、静态变量、实例变量、局部变量的定义与区别
  5. 【译】zkSNARKs in a nutshell
  6. 第一篇 - 手把手教你理清EOS各种开发环境搭建来龙去脉
  7. 爬虫总结(三)-- cloud scrapy
  8. 使用Android Studio运行项目出现 UnsupportedMethodException 错误的解决办法
  9. mysql查询活跃连接,mysql – 使用大量可能的连接进行查询的最佳方法
  10. JZOJ 5660. 【HNOI2018D2T3】道路