C++Primer第五版 第十三章习题答案(1~10)

原创 2017年03月06日 09:45:40

1:知识点1:在定义一个类时,我们可以显式或隐式的定义在此类型的对象拷贝、赋值、移动、销毁是做什么,主要通过五种特殊的成员函数来完成这些操作:拷贝构造函数、拷贝复制运算符、移动构造函数、移动复制运算符。析构函数

知识点2:拷贝和移动构造函数定义了当用同类型的一个对象初始化本对象时做什么。拷贝和移动赋值运算符定义了将一个对象赋予同类型的另一个对象时做什么。析构函数定义了当此类型对象销毁时的操作

知识点3:若一个类没有显式的定义这五个操作,编译器会自动为其定义缺失的操作,在定义一个类时,拷贝控制操作是非常的重要的

知识点4:拷贝构造函数:本身是一个构造函数,其参数是一个自身类类型的引用,且任何额外参数皆有默认值

知识点5:每个成员的类型决定了它的拷贝方式,对于类类型,将调用其拷贝构造函数进行拷贝,对于内置类型,则会直接拷贝,对于数组的拷贝是逐个元素的拷贝,若数组的元素是类类型,则使用拷贝构造函数来拷贝

知识点6:直接初始化:一对小括号加参数。拷贝初始化:等号右侧对象拷贝到正在创建的对象中,如果需要还需进行类型转换(拷贝初始化没有=号的情况:将一个对象作为实参传递给一个非引用类型的形参时、从一个返回类型非引用类型的函数返回一个对象、用花括号初始化列表初始化一个数组的元素或一个聚合类的成员)

知识点7:函数的调用中,非引用类型的参数都要进行拷贝初始化。非引用类型的返回值也会被用来初始化调用方的结果


见知识点


2:此为一个类的拷贝构造函数,作为函数其非引用类型的参数需要进行拷贝初始化,但拷贝初始化又要调用拷贝构造函数以拷贝实参,但为了拷贝实参又需要调用拷贝构造函数,无限循环。


3:StrBlob中元素复制,且智能指针计数加一。StrBlobStr中元素复制,弱指针复制不影响计数器


4:首先foo_bar函数的参数为非引用类型,需拷贝,使用拷贝构造函数、函数的返回类型非引用,也需要进行拷贝,使用拷贝构造函数。

在函数体中arg拷贝到local对象,global拷贝到heap对象,local、*heap拷贝到pa[4]中皆使用拷贝构造函数

local拷贝到*heap为拷贝赋值运算符


5:

HasPtr(const Hasptr& HP):*ps(new string *HP.ps),i(HP.i){}


6:知识点1:拷贝复制运算符,其实就是一个名为 operator= 的函数(operator后加表示要定义的运算符的符号),重载运算符,有返回类型和参数,返回类型通常是左侧运算符的引用

知识点2:若在类内未显式定义,则编译器会自动生成合成拷贝赋值运算符,它主要是将运算符右侧的所有非static成员赋给左侧元算对象对应成员(或是用来禁止该类型对象的赋值)


见知识点


7:所有成员的赋值会发生,两个StrBlob中智能指针所指对象内存相同,计数器加一,两个StrBlobPtr中弱指针所致对象内存相同,计数器不变。


8:相较于第五题,将赋值过程置于函数体内,而不是初始化列表,返回类型不同

HasPtr& operator= (const Hasptr& HP)
{
	string *p = new string(*HP.ps);//new返回的是指向分配好内存、创建了对象的指针
	delete ps;//首先删除原内存
	ps = p;	//赋值	
	i = HP.i;
	return *this;//返回值
}

9:知识点1:构造函数初始化对象的非static数据成员,析构函数释放对象所使用资源,并销毁对象的非static数据成员

知识点2:形式:波浪号加类名

知识点3:构造函数中,成员初始化是在函数体执行之前完成的,且按照他们在类内出现的顺序进行初始化,析构函数中,首先执行函数体,然后销毁成员,成员按照初始化顺序的逆序销毁,所以析构函数可以执行设计者想要的任何收尾工作,再销毁成员

知识点4:成员的销毁完全依赖于其本身的类型,类类型需要执行自身的析构函数,而内置类型则什么也不做(无析构函数)

知识点5:调用析构函数的情况:

1:变量离开作用域时被销毁

2:当对象被销毁,其成员被销毁

3:容器被销毁,成员被销毁

4:动态分配的对象,指针被delete时

5:临时对象,创建的完整表达式结束时

知识点6:合成析构函数—编译器自动生成的析构函数,基本上为空,或者被用来阻止对象被销毁

知识点7:析构函数体自身并不直接销毁成员,是在析构函数体执行完毕之后隐式的析构阶段中被销毁的


见知识点


10:所有对象的数据成员被销毁,智能指针的计数减一,所有对象的数据成员被销毁,弱指针不影响计数器


版权声明:本文为博主原创文章,未经博主允许不得转载。

c++primer(第五版) 第十三章 拷贝控制习题答案

纯原创    转载请注明出处:http://blog.csdn.net/axuan_k 13.2    13.3   13.4    13.5 #include using namespa...
  • AXuan_K
  • AXuan_K
  • 2016年03月29日 12:04
  • 2606

C++ Primer Plus第六版 第十三章 编程练习答案

今天下午体测 GGGGGGGGGGGG //第一题 //main.cpp #include "cd.h" void Bravo(const Cd &disk); int main() { C...
  • zhaoshu01234
  • zhaoshu01234
  • 2015年11月21日 11:55
  • 1530

c++primer(第五版) 第十一章 关联容器习题答案

纯原创    转载请注明出处:http://blog.csdn.net/axuan_k 11.1    11.2     11.4 #include #include #inc...
  • AXuan_K
  • AXuan_K
  • 2016年03月07日 12:57
  • 1086

C++Primer第五版 第二章习题答案(1~10)

2.1 2.2 C++ guarantees short and int is at least 16 bits, long at least 32 bits, long long at least ...
  • misayaaaaa
  • misayaaaaa
  • 2016年11月17日 15:32
  • 4804

C++Primer第五版 第三章习题答案(1~10)

第三章 3.1: 知识点:using声明命名空间。注意的是头文件中不应该包含using声明,因为在引用头文件时,会将头文件中的内容拷贝到文件中来,如果头文件中包含了using声明,那么可能每一个头文件...
  • misayaaaaa
  • misayaaaaa
  • 2016年11月22日 14:40
  • 3108

C++Primer第五版 第十二章习题答案(1~10)

1:知识点1:对象生命周期:全局对象在程序启动时分配,在程序结束时销毁。局部自动对象,当我们进入其定义所在程序块时被创建,在离开块时被销毁。局部static对象在第一次使用前分配,在程序结束时销毁 知...
  • misayaaaaa
  • misayaaaaa
  • 2017年03月03日 09:45
  • 1723

C++Primer第五版 第十六章习题答案(1~10)

1:知识点1:面对对象编程OOP和泛型编程都能处理在编写程序时不知道类型的情况,而OOP能处理类型在程序运行之前都未知的情况,在泛型编程中,在编译时就能获知类型了 知识点2:容器、迭代器、算法都是泛型...
  • misayaaaaa
  • misayaaaaa
  • 2017年03月14日 09:30
  • 1069

C++Primer第五版 第十一章习题答案(1~10)

1:知识点1:关联容器与顺序容器有着根本的不同 知识点2:关联容器的元素是按关键词来保存和访问的,顺序容器是按他们在容器中的位置来顺序访问 知识点3:关键词在关联容器中起到重要的作用,map中的元素是...
  • misayaaaaa
  • misayaaaaa
  • 2017年03月01日 09:31
  • 1780

C++Primer第五版 第十八章习题答案(1~10)

大规模应用程序的特殊要求 知识点1:异常处理:在独立开发的子系统之间协同处理错误的能力 知识点2:命名空间:使用各种库(可能包含独立开发的库)进行协同开发的能力 知识点3:多重继承:对比较复杂的应用概...
  • misayaaaaa
  • misayaaaaa
  • 2017年03月20日 09:26
  • 998

C++Primer第五版 第十章习题答案(1~10)

1:知识点:泛型算法:算法是因为其实现了一些经典算法的公共接口,排序和搜索。泛型是因为他们可以作用于不同类型的元素和多种容器类型甚至是内置数组。故称泛型算法 知识点2:基本上都定义在algorithm...
  • misayaaaaa
  • misayaaaaa
  • 2017年02月26日 09:38
  • 1832
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++Primer第五版 第十三章习题答案(1~10)
举报原因:
原因补充:

(最多只允许输入30个字)