C++primer 13.1.6节练习
练习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节练习相关推荐
- C++primer 13.6.2节练习
练习13.49 13.50 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #in ...
- 《C++ Primer》13.1.3节练习
练习13.9: 析构函数完成与构造函数相反的工作:释放对象使用的资源,销毁非静态数据成员.从语法上看,它是类的一个成员函数,名字是波浪号接类名,没有返回值,也不接受参数. 当一个类没有定义析构函数时, ...
- 《C++ Primer》13.1.2节练习
练习13.6: 拷贝赋值运算符本身是一个重载的赋值运算符,定义为类的成员函数,左侧运算对象绑定到隐含的this参数,而右侧运算对象是所属类类型的,作为函数的参数,函数返回指向其左侧运算对象的引用. 当 ...
- 《C++ Primer》13.1.1节练习
练习13.1: 如果构造函数的第一个参数是自身类类型的引用,且所有其他参数(如果有的话)都有默认值,则此构造函数是拷贝构造函数.拷贝构造函数在以下几种情况下会被使用: ●拷贝初始化(用=定义变量). ...
- 《C++ Primer》13.1.6节练习(部分)
练习13.18: #include <iostream> #include <string> using namespace std;class Employee {priva ...
- 《C++ Primer》13.1.4节练习
练习13.14: 这是一个典型的应该定义拷贝控制成员的场合.如果不定义拷贝构造函数和拷贝赋值运算符,依赖合成的版本,则在拷贝构造和赋值时,会简单复制数据成员.对本问题来说,就是将序号简单复制给新对象. ...
- 【C++ Primer | 13】课后习题答案
文章目录 13.1.4节目练习 13.2节练习 13.2.2练习 13.1.4节目练习 练习13.14 #include <iostream> using namespace std;cl ...
- C++primer 9.2.1节练习
练习9.3 迭代器begin和end必须指向相同的容器,end可以与begin指向相同的位置,但不能指向begin之前的位置: 练习9.4 1 #include <iostream> 2 ...
- C++primer 10.2.1节练习
练习10.3 1 #include<iostream> 2 #include<string> 3 #include<vector> 4 #include <s ...
最新文章
- css的background
- calendar 获取季度的第一天_Java日期查询:日、周、旬、月、季度、年等时间操作...
- WINDOWS渗透与提权总结(1)
- 【文字检测算法整理】
- 用 Hadoop 进行分布式并行编程, 第 1 部分 基本概念与安装部署
- Chapter12(动态内存)--C++Prime笔记
- 深圳 | 鹏程实验室研究员招收访问学生
- powershell自动化操作AD域、Exchange邮箱系列(6)——获取并监控内存、CPU占用率
- 基于机器视觉的电阻焊接质量检测
- Mysql中autocommit的用法
- 偶像dd_engi 的学习之路《转》
- SqlAlchemy操作(一)
- c语言标准库详解(一):stdio.h之文件操作
- hilife技术支持网站
- [MATLAB]最邻近插值法进行图像放大
- 【Python网络蜘蛛 · 8】:moviepy模块实现音频+视频的合成
- jQuery大法第五式--动画效果
- app中常见的测试点
- DEDE自动调用轮播图/幻灯片
- idea突然打不开了
热门文章
- 不同寻址方式的灵活应用——改变每个单词首字母大小写
- 故障解决:没有未桥接的主机网络适配器
- @RequestParam和@RequestBody的区别 (结合 Get/Post )
- 全局变量、成员变量、类变量、静态变量、实例变量、局部变量的定义与区别
- 【译】zkSNARKs in a nutshell
- 第一篇 - 手把手教你理清EOS各种开发环境搭建来龙去脉
- 爬虫总结(三)-- cloud scrapy
- 使用Android Studio运行项目出现 UnsupportedMethodException 错误的解决办法
- mysql查询活跃连接,mysql – 使用大量可能的连接进行查询的最佳方法
- JZOJ 5660. 【HNOI2018D2T3】道路