C++ 构造函数
1、简介
构造函数:构造函数是类的一种特殊成员函数,它会在每次创建类的新对象的时候
执行。构造函数与类名完全相同,并且不会返回任何类型,也不会返回void
。构造函数可用于为某些函数设置初始值。
2、默认构造函数(无参构造函数)
2.1、隐式默认构造函数
(1) 什么时候会生成隐式默认构造函数?
- 如果用户
没有显式定义任何构造函数
,编译器会自动生成一个隐式默认构造函数;class S {public:int a;char ch;int* p; }; int test() {S s; // 调用编译器生成的默认构造函数,此时成员变量未初始化,是随机值。return 0; }
- 如果用户
定义了任何构造函数
,编译器不会自动生成默认构造函数,除非用户使用= defalut
强制编译器生成默认构造函数。 - 如果类的成员变量没有默认构造函数,编译器无法生成默认构造函数。
- 如果类的基类没有默认构造函数,编译器无法生成默认构造函数。
- 如果类的成员变量是引用类型,编译器无法生成默认构造函数。
- 如果类型成员是const类型,且未提供类内初始化,编译器无法生成默认构造函数。
- 如果默认构造函数被
= delete
显式删除,编译器无法生成默认构造函数。
- 代码示例:
class Base { public:Base(int val) : a(val) {} int a; } class S : public Base { // 情况4public:S() = default; // 反例:情况2S() = delete; // 情况7S(int a) : Base(a), a(a) {} // 情况2public:Base base; // 情况3 int & i; // 情况5const int ci1; // 情况6const int ci2 = 1; // 反例:情况6 int a;char ch