1. 构造函数和析构函数
对象的初始化和清理是两个非常重要的安全问题,一个对象或者变量没有初始化时,对其使用的后果是未知的,同样使用完一个变量,没有及时清理,也会造成一定的安全问题,c++提供了这种问题完整的解决方案,即构造函数和析构函数,这两个函数也会被编译器自动调用,完成对象的初始化和对象清理工作。不论编程人员是否喜欢,对象的初始化和清理工作是编译器强制要求的事情,即使不提供初始化操作和清理操作,编译器也会增加默认的操作,只是这个默认初始化操作不会做任何事情,所以编写类应该顺便提供初始化函数。
构造函数:主要用于在创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用
构造函数可以重载,无返回值,可以有参数
析构函数:主要用于对象销毁前系统自动调用,执行一些清理工作。
析构函数不可以重载,无返回值
例:构造函数和析构函数的调用
1. 构造函数的分类和调用
a. 按照参数分类:无参构造函数(默认构造函数), 有参构造函数;
b. 按照类型分类:普通构造函数,拷贝构造函数
People类的描述如匿名对象下面代码所示
2. 匿名对象:如果编译器发现对象是匿名的,这行代码结束以后就会释放资源
3. 拷贝构造函数调用的时机
a. 以值传递的方式给函数参数传递、
b. 以值的方式返回局部对象
c. 用已经创建好的对象来初始化新的对象
4. 构造函数的调用规则:析构函数都会默认提供
a. 用户提供有参的构造函数,编译器将不提供默认的构造函数,但是系统会提供默认的拷贝构造函数
系统默认提供三个构造函数:
默认构造函数:无参数,函数体为空
拷贝构造函数:对类中非静态成员属性进行简单值拷贝
析构函数:无参,函数体为空
b. 当用户提供了拷贝构造函数,系统将不会提供默认和拷贝构造函数
5. this指针和对象数组