初始化与清除

文章介绍了C++中构造函数的作用,它是用来确保对象在创建时被正确初始化,可以被重载。默认构造函数在未显式定义时由编译器提供。析构函数用于清理和释放资源,名称以波浪线~开头,不可重载。在对象生命周期结束时,如作用域结束,编译器会自动调用析构函数。对于嵌套类,构造顺序是从内到外,而析构顺序则相反,从外到内。
摘要由CSDN通过智能技术生成

1.构造函数

        类的创建者可以通过提供一个叫做构造函数的特殊函数,来保证每个对象都被初始化。如果一个类有构造函数,编译器在创建对象的时候就会自动调用这个函数。 

 

        

         从上面的例子我们可以看出,构造函数和类同名,没有返回值,另外的,构造函数还可以重载

 在这个例子中,Date(int y,int m, int d);是类Date的构造函数,在类中给出声明以后,随后的下面给出定义。然后在主函数创建类的实例的时候,Date date (2005,7,5)通过调用构造函数完成了类的初始化。

对于默认构造函数,如果在定义某个类的时候没有显式的定义任何构造函数,那么编译器就会为这个类提供默认构造函数。他是不带参数的构造函数。例如下图:

左侧和右侧完全相等,也就是,用户没有显式地定义任何构造函数,那么编译器就会自动生成一个默认构造函数,也就是不含任何参数的A(){}

 

 在上面的例子中,A是嵌套在B的内部的,所以我们在B b;的时候首先会初始化A,调用A的默认构造函数A(),然后再调用B的默认构造函数B(),所以会打印出A()和B()

2.析构函数

在C++中,清理和初始化同样重要

一个析构函数可以清除和释放资源。析构函数通过补码符号~和类名来标识,没有参数没有返回值不可以被重载

 

 例如,在Date(2022,3,7),tomorrow(200,3,8);首先调用了构造函数,在调用完一部分成员函数后,到达了类的作用域的末端,因此,编译器自动调用了析构函数来释放资源。

类似的,如果我们不在类中显示地写出析构函数,编译器会自动地认为类中有析构函数。

 

        类似的,对于嵌套的类,首先调用的是外部的类的析构函数,其次再是内部的类。这一点和构造函数相反。可以这样想,把嵌套的类看做箱子装箱子,要想构造一个箱子装箱子,首先要有一个小箱子,也就是率先构造内部类,而对于破坏一个箱子套箱子的结构,首先要破坏的是外部的箱子,也就是率先调用外部的析构函数。 

        再看这个例子,在循坏体内部,首先调用了e0的构造函数,所以先打印 0is created,随后,使用了create_example(1)调用了e1的构造函数,并且打印出functionis over,伴随着这个create_example函数的结束,e1的作用域结束,调用析构函数销毁,打印出1is destroyed,随后,伴随着这一次循坏结束e(0)也到达作用域末端,调用析构函数销毁。

总结

1.构造函数

2.析构函数

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值