构造函数的作用
构造函数的主要任务是初始化对象,而不是创建对象(对象的内存空间在构造函数被调用前已经分配好)。
构造函数特性
-
命名规则:函数名必须与类名完全相同。
-
返回值:构造函数没有返回值类型(连void都没有)。
-
自动调用:在创建对象时,编译器会自动调用对应的构造函数。
-
重载能力:
-
构造函数可以重载(相同函数名,不同参数列表)
-
无参构造函数的调用要注意语法:
cpp
Date d1; // 正确调用无参构造函数 Date d2(2015, 1, 1); // 调用带参构造函数// 错误示例:会被解析为函数声明 Date d3(); // 声明了一个返回Date对象的函数d3
-
-
默认生成规则:
-
如果类中没有显式定义任何构造函数,编译器会自动生成一个无参的默认构造函数
-
一旦用户显式定义了任何构造函数,编译器将不再自动生成默认构造函数
-
-
内置类型初始化问题:
-
对于内置类型(int, double, char等),默认构造函数不会进行有效初始化。编译形成的构造函数没有内置类型的赋值指令,值是原先开辟空间时残留下的值
-
C++11补丁:可以在声明成员变量时提供默认值,编译器会自动添加赋值代码 如:_x(10) ,使构造函数编译后内置类型有对应赋值指令
cpp
class Date {int year = 1970; // 提供默认值int month = 1;int day = 1; };
- 在 C++ 中,内置类型(如
int
、float
、double
、char
、指针等)没有构造函数,它们的初始化完全依赖编译器在底层生成赋值指令。
-
-
默认构造函数定义:
-
任何可以被无参调用的构造函数都是默认构造函数
-
包括:
-
无参构造函数
-
全缺省参数的构造函数
-
编译器自动生成的构造函数
-
-