第13章 对象的初始化、拷贝和析构
构造函数、析构函数和赋值函数(操作符)是每个类最基本的函数。
13.1 构造函数与析构函数的起源
把对象的初始化工作放在构造函数中,把清除工作放在析构函数中。当创建对象时构造函数被自动执行;当对象消亡时,析构函数被自动执行。这样就不用担心忘记对象的初始化和清除工作了。
13.2 为什么需要构造函数和析构函数
注意“初始化”与“赋值”的区别。
13.3 构造函数的成员初始化列表
1)首先调用基类的构造函数,并向它们传递所需的参数;
2)初始化本类的数据成员(包括成员对象的初始化);
3)在构造函数体内完成其他的初始化工作。
13.4 对象的构造次序和析构次序
对象的数据成员的初始化次序只由它们在类中声明的次序决定,因为这个顺序是唯一的!而析构函数则完全按照与构造函数相反的次序执行。
13.5 构造函数与析构函数的调用时机
13.6 构造函数和赋值函数的重载
1、C++允许为类定义多个构造函数,即重载构造函数。当我们为类定义多个构造函数时,设法把其中相同任务的代码片段抽取出来形成一个非public的成员函数,然后在适当的地方调用它。
2、类的赋值函数operator=()也是一种拷贝函数,当然也可以重载。其参数可以是当前类(即类的拷贝赋值操作符),也可以是其它任何类型的参数。
通常来讲,倘若类中含有指针成员或引用成员时,就应该重新定义拷贝构造函数和拷贝赋值函数以及析构函数。
13.9 示例:类String的拷贝构造函数和拷贝赋值函数
不要忘记检查自赋值。
13.10 用偷懒的办法处理拷贝构造函数和拷贝赋值函数
即如果不想使用编译器为我们生成的函数就要明确的阻止。
13.11 如何实现派生类的基本函数
基类的构造函数、析构函数和赋值函数都不能被派生类继承。
构造函数、析构函数和赋值函数(操作符)是每个类最基本的函数。
13.1 构造函数与析构函数的起源
把对象的初始化工作放在构造函数中,把清除工作放在析构函数中。当创建对象时构造函数被自动执行;当对象消亡时,析构函数被自动执行。这样就不用担心忘记对象的初始化和清除工作了。
13.2 为什么需要构造函数和析构函数
注意“初始化”与“赋值”的区别。
13.3 构造函数的成员初始化列表
1)首先调用基类的构造函数,并向它们传递所需的参数;
2)初始化本类的数据成员(包括成员对象的初始化);
3)在构造函数体内完成其他的初始化工作。
13.4 对象的构造次序和析构次序
对象的数据成员的初始化次序只由它们在类中声明的次序决定,因为这个顺序是唯一的!而析构函数则完全按照与构造函数相反的次序执行。
13.5 构造函数与析构函数的调用时机
13.6 构造函数和赋值函数的重载
1、C++允许为类定义多个构造函数,即重载构造函数。当我们为类定义多个构造函数时,设法把其中相同任务的代码片段抽取出来形成一个非public的成员函数,然后在适当的地方调用它。
2、类的赋值函数operator=()也是一种拷贝函数,当然也可以重载。其参数可以是当前类(即类的拷贝赋值操作符),也可以是其它任何类型的参数。
13.7 示例:类String的构造函数和析构函数
13.8 何时应该定义拷贝的构造函数和拷贝赋值函数通常来讲,倘若类中含有指针成员或引用成员时,就应该重新定义拷贝构造函数和拷贝赋值函数以及析构函数。
13.9 示例:类String的拷贝构造函数和拷贝赋值函数
不要忘记检查自赋值。
13.10 用偷懒的办法处理拷贝构造函数和拷贝赋值函数
即如果不想使用编译器为我们生成的函数就要明确的阻止。
13.11 如何实现派生类的基本函数
基类的构造函数、析构函数和赋值函数都不能被派生类继承。