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