第4节、类
4.1 C++中类的实例化
在C++中实例化一个类不需要用new。也可以用new,但是区别是:不使用new,开辟栈空间,使用new开辟的空间为堆空间。
4.2 构造函数和析构函数、拷贝构造函数
4.2.1.析构函数
析构函数是C++内释放的时候调用的函数。
构造函数语法:类名(){}
- 构造函数,没有返回值也不写void
- 函数名称与类名相同
- 构造函数可以有参数,因此可以发生重载
- 程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次
4.2.2.构造函数
对象创建的时候调用的函数。 C++中不使用new,它也会调用构造函数。在C++中如果用户定义有参构造函数,那么C++不会提供无参构造函数。这一点与Java和C sharp不同。
析构函数语法: ~类名(){}
- 析构函数,没有返回值也不写void
- 函数名称与类名相同,在名称前加上符号 ~
- 析构函数不可以有参数,因此不可以发生重载
- 程序在对象销毁前会自动调用析构,无须手动调用,而且只会调用一次
此外C++还有拷贝构造函数。
4.2.3.拷贝构造函数
C++中拷贝构造函数调用时机通常有三种情况
- 使用一个已经创建完毕的对象来初始化一个新对象
- 值传递的方式给函数参数传值
- 以值方式返回局部对象
默认提供的拷贝构造函数对C加对C++对象的属性进行浅拷贝。
这就是问题所在,如果上一个函数在释放之后将其变量delete掉那么下一个函数在拷贝时。得到的值就是空。所以我们要自定义拷贝构造函数。
示例:
class Person {
public:
//无参(默认)构造函数
P