C++类的默认构造函中,细数你所不知道的细节

1.一般情况下编译器会为类生成一个默认无参构造函数

如图,定义了一个空的类Man,下面主函数,声明了一个Man对象man,运行编译器没报错。证明编译器是给我们创建了一个默认的无参构造函数
在这里插入图片描述

2.当我们为类创建了一个有参构造后,编译器不会为我们生成默认无参构造了

Man man;这样的声明方式编译器报错了。证明编译器没有为我们生存默认的无参构造函数。
在这里插入图片描述

如果需要用到无参构造函数,只能我们自己写一个无参构造了
在这里插入图片描述

3.如果不想编译器为我们生成默认构造函数,我们可以这样拒绝

在这里插入图片描述
把无参构造函数写到private下,这样类外不能调用,等效于编译器没有给我们提供无参默认构造函数。

4.如果一个类中没有定义任何的构造函数,编译器只有在这三种情况下才会提供默认构造函数

1.如果类有虚拟成员函数或者虚拟继承父类(即有虚拟基类)时;
2.如果类的基类有构造函数(可以是用户自定义的构造函数,或编译器提供的默认构造函数);
3.在类中的所以非静态的对象数据成员,它们所属的类中构造函数(可以是用户自定义的,可以是编译器提供的默认构造函数)。

你一定以为,那不是包括了全部了吗。
那好的,来几个反例
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_50188452/article/details/115245024