C++构造函数详解

目录

如果对你有帮助,点个赞吧!

构造函数:

1、函数名与类名相同

2、无返回值

3、对象实例化时编译器自动调用对用的构造函数

4、构造函数可以重载

5、如果我们没有显式定义构造函数,编译器会自动生成一个构造函数,即默认构造函数

6、默认构造函数对基本类型不做处理,对自定义类型会自动调用对象类的构造函数

7、默认构造函数共有三种形式:无参数构造函数、全缺省构造函数、编译器自动生成的默认构造函数


构造函数:


1、函数名与类名相同


2、无返回值


3、对象实例化时编译器自动调用对用的构造函数


4、构造函数可以重载


5、如果我们没有显式定义构造函数,编译器会自动生成一个构造函数,即默认构造函数

6、默认构造函数对基本类型不做处理,对自定义类型会自动调用对象类的构造函数


同时,注意思考:
既然我们不写,编译器会自动生成默认构造函数,那么这个自动生成的默认构造函数调用的时候会做什么呢?
注意:C++98规则规定,内置类型不做处理,对自定义类型会调用构造函数
内置类型/基本类型:int/char/double/指针  (语言自己定义的类型) 
自定义类型:struct/class(也就是根据我们的需求而自定义的类型)
默认生成的构造函数,对内置类型不做处理,也就是说根本就不会调用
如果是自定义类型,对自定义类型就会去调用类的构造函数
什么意思?
假如一个类内部的成员变量全都是内置类型,那么就不会调用构造函数
如果是类内部有成员变量是我们自定义的内置类型,就会去调用这个自定义变量类它自己的构造函数
举个例子:
我们声明了一个类A
然后,又声明了一个类B
我们在类B的内部定义了一个类A的变量
那么,此时这个类A就是一个自定义类型,因为它不属于任何一个基本数据类型
所以,此时这个自定义类型A就会去调用这个类A本身内部的构造函数
注意,调用构造函数,本质上是一种初始化,从这个角度理解也许会更加顺畅一点
但是后来,委员会觉得对内置类型不做处理似乎有些不太合适
所以,在后来的C++11版本
对这个机制做了一个补丁:
即基本类型可以使用缺省声明
所以,在类内部的基本类型int、char、double等可以给缺省值
但是要注意,是缺省,不是定义初始化

事实上,所有的自定义类型层层向底层套,最底层都一定是内置类型
而这个内置类型,始终都是需要我们自己去定义处理的

7、默认构造函数共有三种形式:无参数构造函数、全缺省构造函数、编译器自动生成的默认构造函数


构造函数,只能取以上三种的其中一个
如果我们没有写任何一个构造函数,编译器就会生成一个默认构造函数
如果我们写了无参数构造函数或者全缺省构造函数,那么编译器就不会再生成默认构造函数
但是注意:
尽管构造函数可以重载,但是默认构造只能有一个
因为,写了,就不会生成;不写,就会生成
而对于我们自己写的无参数构造函数和全缺省构造函数只能写一个
为什么?
因为,如果同时写,就会造成调用歧义
因为二者都是不传参数,那么编译器怎么知道要调用哪一个呢?
所以,只能选其一
但是,一般来说,我们更加推荐写全缺省的构造函数
因为,可以不传参,也可以部分传参,更可以全部传参,相较之下更加灵活
那么,为什么默认构造函数不能有形参呢?
因为,默认构造函数最重要的机制是编译器自动调用
如果你写了一个形参进去,编译器怎么自动调用这个构造函数呢?
还得你传个参数才能调用,那编译器还自动个什么?
所以,就会报错。

如果对你有帮助,点个赞吧!

  • 22
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二十5画生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值