教你学习C++ -- (4)类的构造函数与析构函数

一、构造函数

1、构造函数的介绍

        什么是构造函数:构造函数是类里面的某种属性的函数。构造函数是在创建对象时会自动执行的一个函数。一般构造函数里面经常放需要初始化的程序。在创建对象时,就会初始化相应的程序了。

2、构造函数的定义

        在C++中定义构造函数:直接使用类名做函数名:类名::类名();这样。如下图

说明:

        在定义好我们的类之后,把所有东西都写好后,只需要定义一个对象。就默认初始化所有东西了。可以在构造函数里面做一些配置、或者申请内存这些等等。

        上图的构造函数是没有形参的,而构造函数是支持带形参的。并且支持重构(重构构造函数)。

3、构造函数重载

        应用场合:比如我们在配置一些东西时,会有不同的模式或者功能这些。这些模式是可以根据场合来选择的,不是,每次都要去设置完。这样就可以构造函数的重载来实现。在定义对象时,传入不同的参,就能去初始化不同的设置。具体如下。

说明:

        在构造函数的重载里面,在定义对象时,传入的不同形参,就会去执行不同的构造函数。这个在QT里面的应用场合很多很多。是重点!

4、构造函数的调用

        如上面介绍的,重构函数是在定义一个对象的时候会执行。先看对象定义的格式。

说明:上面看到,定义对象的格式可以分成两部分(1)左边的定义一个类的指针。(2) 使用new表示的是申请一个类的地址。

        那这说明,所谓定义一个对象,就是先定义一个类的指针,然后在申请一个类的地址。把申请到的地址放到指针中,让指针有指向。

拆分写如下。

说明:如上图,申请的地址是没有去存储起来的。定义的指针也没有指向。

那我们一句一句来写,看那句会执行构造函数呢?

说明:可以看到,构造函数是在申请地址的时候会执行。定义指针的时候并不会执行。

执行构造函数的,还有下面这种情景(定义一个类变量的时候),如下

1、申请地址,定义变量、定义指针的的区别

(1)申请地址,它返回的是一个自定义类的类型地址。这个地址的大小和类的大小是一样的。

(2)定义变量、定义变量,这个变量的地址类型是这个自定义类的类型地址,变量的地址大小和类的大小也是一样的。

(3)定义指针,定义一个自定义的指针,只是说这个指针能指向的地址只能是自定义类的类型地址。但是指针本身的地址,并不是自定义类的类型地址。指针本身的地址只是一个普通的地址,并且它的大小在32位系统中只有4个字节大小。在64位系统中是8字节大小。指针本身地址和自定义类的类型地址是没有关系的。

总结:由上面的解析可得知,构造函数只有在创建一个自定义类的类型地址时,会执行。而申请地址和定义一个类的变量时候,都是在创建一个类的地址,这样才会执行。定义指针时,并不会创建自定义类的地址。

变量定义成全局,构造函数一样会执行,如下

二、析构函数

1、析构函数的介绍

        什么是析构函数:析构函数是类里面的某种属性的函数。析构函数是在删除对象时会自动执行的一个函数。一般是用来释放内存等。比如在一个类里面有申请了一些内存,但是在对象使用完后并没有去释放内存这些。这样在删除对象时,就会去自动调用析构函数来释放内存了。具体实现什么功能,根据项目需求来。

2、析构函数的定义

析构函数定义格式:函数名与类名相同,并且在函数名前加~    如下:类名::~类名();

说明:

        析构函数是在删除对象是会自动调用,值得注意的是,析构函数是不支持带形参的。也就是同样不支持重载了。

更多精彩内容请持续关注下一篇!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值