参考博客:https://blog.csdn.net/china_jeffery/article/details/79288103#commentBox
以下内容是在上述博主的博客中提炼出来的:
一、默认构造函数的含义是啥:
主要就是:默认构造函数在调用的时候不需要显示传入实参的构造函数
二、默认的构造函数的分类
1、无参构造函数:就是没有参数的构造函数
class Sample {
public:
// 默认构造函数。
Sample() //同时也是无参构造函数,就是没有任何参数的构造函数
{
// do something
}
};
2、带有形参,并且带有默认值的构造函数
class Sample {
public:
// 默认构造函数,会有默认值,当调用的时候没有实参传入的时候,就会默认调用该形参默认值
Sample(int m = 10)
{
// do something
}
};
三、默认构造参数在什么时候被调用
1、被调用的情况:就是被编译器需要的时候,才会生成默认构造函数(待考证)
2、具体需要的情况:
(1)当该类的类对象数据成员
有默认构造函数时。//待考证
(2)当该类的基类有默认构造函数时。
(3)当该类的基类为虚基类时。
(4)当该类有虚函数时。//待考证
四、默认构造函数又名缺省构造函数
注意,这个名字真的真的是我第一次才知道,之前被几个构造函数弄晕了,这个概念又更新了我对C++新的认识
1、默认构造函数又名缺省构造函数,只能使用一个,也就是说在一个类中只能出现一个无参构造函数或者只能出现一个带有形参带有默认值的构造函数
上代码解释:
#include <iostream>
#include <stdio.h>
using namespace std;
class Sample {
public:
// 默认构造函数
Sample() {
// do something
printf("Sample()");
}
// 默认构造函数
Sample(int m = 10) {
// do something
printf("Sample(int m = 10)");
}
};
int main()
{
Sample s; // error C2668: “Sample::Sample”: 对重载函数的调用不明确
return 0;
}
五、使用默认构造函数的时候创建对象不能后面带有括号
#include<iostream>
#include <stdio.h>
class Sample {
public:
// 默认构造函数
Sample() {
// do something
printf("Sample()");
}
};
int main()
{
Sample s;
while (1);
return 0;
}
我使用的是vs编译器,如果将s变成s()的时候会发现,不会打印出来东西,只有将更改为s的时候才有结果