C++————构造函数与析构函数
在C++中,我们有一个专门有一个函数给类的成员赋值,这个赋初值的工作由构造函数来完成。
说明:
1.构造函数的名字必须与类名相同,否则编译程序将把它当成一般的成员函数来处理。
2.构造函数没有返回值,在定义构造函数时,是不能说明它的类型的,void类型也不可以。
3.与普通成员函数一样,构造函数的函数体可写在类体内,也可以写在类体外。
4.构造函数一般用于赋初值,根据用户的需求设置。
5.构造函数可以带默认参数。
6.在实际的应用中,通常需要给每个类定义构造函数。如果没有给类定义构造函数,系统自动生成一个默认的构造函数,这个构造函数的函数体是空的。
7.构造函数是在对象定义的时候调用的。
8.构造函数还支持重载。
我们来使用一下构造函数
我们输出30
这个是我们赋初值的效果。
我们接下来看看其他赋初值的方法
我们如何验证构造函数是在对象建立的时候进行赋初值
构造函数赋初值是在对象建立的时候进行的。
析构函数有什么作用,它与构造函数功能有着相反的作用,构造函数是赋初值,我们的析构函数是一个善后,释放内存分配给对象的空间,我们在对象销毁的时候会调用析构函数
析构函数说明:
1.析构函数与类名相同,但它前面必须加一个波浪号(~)
2.析构函数不返回任何值。viod类型也不行。
3.析构函数没有参数,不可以被重载。
4.撤销对象时,编译系统会自动调用析构函数。
5.new申请的对象,如果我们不手动释放,不能调用析构函数。
析构函数调用:
1.函数结束。
2.程序结束。
3.包含局部函数变量的块结束。
4.调用删除运算符(delete)。
析构函数的使用
假如这个是程序阅读题,我们应该怎么输出。
先调用构造函数,所以先输出一句调用构造函数的语句,如何输出29,如何再调用一个构造函数,输出200。
我们析构函数应该先释放那个对象,这个涉及到函数栈的问题,先创建的对象在栈低是最后释放的,所以我们先释放p2对象,p1对象最后释放。
这个就像一个死胡同,只有先进来的人出去,前面进来的才能出去。
new申请的空间不能自动调用析构函数。
使用delete释放空间后就会调用析构函数,