【C++】类和对象--constructor和destructor
Constructor:人称构造函数,用来初始化class,在class内部或外部都可以定义,在实例化class的时候会被调用。
Constructor的写法一般会有:
1. 默认的构造函数,也就是实例化的时候不带任何变量就能调用的构造函数;(这种情况有可能是构造函数就没给默认值,也可能是给了固定的默认值)
2. 重载构造函数,在有或者没有默认构造函数的基础上,带有相关变量,用来初始化class。
如果有重载构造函数,在实例化的时候,会根据实例化带的参数,来选取调用的是哪个构造函数。
新建一个class时候,上面这两种构造函数必须得带有一种。
上面的程序运行结果为:
要注意:1. 默认构造函数和重载构造函数必须要有一个;要是使用重载构造函数,那么必须要带初始化的参数;class被初始化后,由于它的属性被定义为private,那么这些属性的值不能再被修改。
初始化列表的必要性:在数据成员是const时候,用构造函数是不能直接给成员赋值的,这时候只能用初始化列表来给成员赋值!
拷贝构造函数:
Student stu1;
Student stu2=stu1;
Student stu3(stu1);
后两种情况,实例化的时候,调用的构造函数就是拷贝构造函数,而不会调用类的构造函数。
通常我们不会在程序中写拷贝构造函数,那么系统会自动生成一个默认拷贝函数。
析构函数:
1. 自己不定义的话,系统会自动生成默认析构函数。
2. 在对象销毁时,会自动调用。
2. 在类中使用new申请堆内存的情况下,必须写析构函数,用delete来销毁申请的内存,否则会造成内存泄漏。