构造函数
概念
“构造函数”一般在类类型对象的初始化时被调用,每一个对象只能在初始化的时候调用一次。
特性
- 无返回值
- 名字与类名相同
- 属于函数重载
class Date
{
public:
// 构造函数初始化类类型成员
// 尽量选择全缺省以适配无参调用
// 在.h文件中声明全缺省函数
// Date(int year = 1, int month = 1, int day = 1);
Date(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
private:
int _year;
int _month;
int _day;
};
调用方法
// 有两种调用构造函数的方法
// 方法一:
// 对于d1,可以不完全传参,也可以不传,因为函数声明为全缺省参数
Date d1(2024, 5, 22);
Date d1(2024, 5); // 此时,day的值将会由对应传参位置的缺省值赋值
Date d1; // 此时为无参调用,d1的值就是缺省值
重点知识:
- 如果没有显示构造函数,编译器也会自己生成一个构造函数,对于内置类型成员,C++没有规定要做处理,所以可能会被初始化为1或随机值;
- 对于自定义类型,编译器会调用该自定义类型的构造函数。
class Time
{
public: // 3.此时,编译器找到了Time,但是Time没有显式
// 构造函数,所以对于内置类型,编译器可能不做处理
private:
int s;
};
class Date
{
public:
private:
int _year; // 1.如果没有显式构造函数,系统则会自动生成
int _month; // 对于内置类型,可能做处理
int _day;
Time t; // 2.对于自定义类型,则会调用其构造函数
};
总结:表面上说对于自定义类型,调用其构造函数,但自定义类型中的成员终究也含有内置类型,所以还得去写内置类型的构造函数。