我是靠谱客的博主 标致寒风,最近开发中收集的这篇文章主要介绍C++Primer(第五版 )第十三章 拷贝控制 章节编程练习答案,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

13.1  拷贝构造函数是什么?什么时候使用它?

答:

如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数。当使用拷贝初始化时,我们会用到拷贝构造函数。

13.2  解释为什么下面的声明是非法的:

答:

参数类型应该是引用类型。

13.3  当我们拷贝一个StrBlob时,会发生什么?拷贝一个StrBlobPtr呢?

答:

当我们拷贝StrBlob时,会使 shared_ptr 的引用计数加1。当我们拷贝 StrBlobPtr 时,引用计数不会变化。

13.4  假定 Point 是一个类类型,它有一个public的拷贝构造函数,指出下面程序片段中哪些地方使用了拷贝构造函数:

答:

如上图,共6处

13.5  给定下面的类框架,编写一个拷贝构造函数,拷贝所有成员。你的构造函数应该动态分配一个新的string,并将对象拷贝到ps所指向的位置,而不是拷贝ps本身:

答:

13.6  拷贝赋值运算符是什么?什么时候使用它?合成拷贝赋值运算符完成什么工作?什么时候会生成合成拷贝赋值运算符?

答:

拷贝赋值运算符是一个名为 operator= 的函数。当赋值运算发生时就会用到它。合成拷贝赋值运算符可以用来禁止该类型对象的赋值。如果一个类未定义自己的拷贝赋值运算符,编译器会为它生成一个合成拷贝赋值运算符。

13.7  当我们将一个 StrBlob 赋值给另一个 StrBlob 时,会发生什么?赋值 StrBlobPtr 呢?

答:

会发生浅层复制。

13.8  为13.1.1节练习13.5中的 HasPtr 类编写赋值运算符。类似拷贝构造函数,你的赋值运算符应该将对象拷贝到ps指向的位置。

答:

13.9  析构函数是什么?合成析构函数完成什么工作?什么时候会生成合成析构函数?

答:

析构函数是类的一个成员函数,名字由波浪号接类名构成。它没有返回值,也不接受参数。合成析构函数可被用来阻止该类型的对象被销毁。当一个类未定义自己的析构函数时,编译器会为它生成一个合成析构函数。

13.11  为前面练习中的 HasPtr 类添加一个析构函数。

答:

13.12  在下面的代码片段中会发生几次析构函数调用?

答:

三次,分别是 accumitem1item2

13.13  理解拷贝控制成员和构造函数的一个好方法的定义一个简单的类,为该类定义这些成员,每个成员都打印出自己的名字:

给 X 添加拷贝赋值运算符和析构函数,并编写一个程序以不同的方式使用 X 的对象:将它们作为非引用参数传递;动态分配它们;将它们存放于容器中;诸如此类。观察程序的输出,直到你确认理解了什么时候会使用拷贝控制成员,以及为什么会使用它们。当你观察程序输出时,记住编译器可以略过对拷贝构造函数的调用。

答:

13.14  假定 numbered 是一个类,它有一个默认构造函数,能为每个对象生成一个唯一的序号,保存在名为 mysn 的数据成员中。假定 numbered 使用合成的拷贝控制成员,并给定如下函数:

则下面代码输出什么内容?

答:

输出3个完全一样的数。

13.17  分别编写前三题中所描述的 numbered 和 f,验证你是否正确预测了输出结果。

答:

13.14

13.15

13.16

13.18  定义一个 Employee 类,它包含雇员的姓名和唯一的雇员证号。为这个类定义默认构造函数,以及接受一个表示雇员姓名的 string 的构造函数。每个构造函数应该通过递增一个 static 数据成员来生成一个唯一的证号。

答:

13.19  你的 Employee 类需要定义它自己的拷贝控制成员吗?如果需要,为什么?如果不需要,为什么?实现你认为 Employee 需要的拷贝控制成员。

答:

13.22  假定我们希望 HasPtr 的行为像一个值。即,对于对象所指向的 string 成员,每个对象都有一份自己的拷贝。我们将在下一节介绍拷贝控制成员的定义。但是,你已经学习了定义这些成员所需的所有知识。在继续学习下一节之前,为 HasPtr 编写拷贝构造函数和拷贝赋值运算符。

答:

13.26  对上一题中描述的 strBlob 类,编写你自己的版本。

答:

13.27  定义你自己的使用引用计数版本的 HasPtr

答:

13.28  给定下面的类,为其实现一个默认构造函数和必要的拷贝控制成员。

答:

13.30  为你的类值版本的 HasPtr 编写 swap 函数,并测试它。为你的 swap 函数添加一个打印语句,指出函数什么时候执行。

答:

13.31  为你的 HasPtr 类定义一个 < 运算符,并定义一个 HasPtr 的 vector。为这个 vector 添加一些元素,并对它执行 sort。注意何时会调用 swap

答:

13.34  编写本节所描述的 Message

答:

13.39  编写你自己版本的 StrVec,包括自己版本的 reservecapacity 和resize

答:

13.40  为你的 StrVec 类添加一个构造函数,它接受一个 initializer_list<string> 参数。

答:

头文件

实现:

13.44 编写标准库 string 类的简化版本,命名为 String。你的类应该至少有一个默认构造函数和一个接受 C 风格字符串指针参数的构造函数。使用 allocator 为你的 String类分配所需内存。

答:

13.45  解释左值引用和右值引用的区别?

答:

常规引用被称为左值引用,绑定到右值的引用被称为右值引用。

13.46  什么类型的引用可以绑定到下面的初始化器上?

答:

13.58  编写新版本的 Foo 类,其 sorted 函数中有打印语句,测试这个类,来验证你对前两题的答案是否正确。 

答:

最后

以上就是标致寒风为你收集整理的C++Primer(第五版 )第十三章 拷贝控制 章节编程练习答案的全部内容,希望文章能够帮你解决C++Primer(第五版 )第十三章 拷贝控制 章节编程练习答案所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部