【C++】类和对象--constructor和destructor

Constructor:人称构造函数,用来初始化class,在class内部或外部都可以定义,在实例化class的时候会被调用。

Constructor的写法一般会有:

1. 默认的构造函数,也就是实例化的时候不带任何变量就能调用的构造函数;(这种情况有可能是构造函数就没给默认值,也可能是给了固定的默认值)

2. 重载构造函数,在有或者没有默认构造函数的基础上,带有相关变量,用来初始化class。

如果有重载构造函数,在实例化的时候,会根据实例化带的参数,来选取调用的是哪个构造函数。

新建一个class时候,上面这两种构造函数必须得带有一种。

【C++】类和对象--constructor和destructor

上面的程序运行结果为:

【C++】类和对象--constructor和destructor

要注意:1. 默认构造函数和重载构造函数必须要有一个;要是使用重载构造函数,那么必须要带初始化的参数;class被初始化后,由于它的属性被定义为private,那么这些属性的值不能再被修改。

【C++】类和对象--constructor和destructor

初始化列表的必要性:在数据成员是const时候,用构造函数是不能直接给成员赋值的,这时候只能用初始化列表来给成员赋值!

拷贝构造函数:

Student stu1;

Student stu2=stu1;

Student stu3(stu1);

后两种情况,实例化的时候,调用的构造函数就是拷贝构造函数,而不会调用类的构造函数。

通常我们不会在程序中写拷贝构造函数,那么系统会自动生成一个默认拷贝函数。

 

析构函数:

1. 自己不定义的话,系统会自动生成默认析构函数。

2. 在对象销毁时,会自动调用。

2. 在类中使用new申请堆内存的情况下,必须写析构函数,用delete来销毁申请的内存,否则会造成内存泄漏。