构造函数:
空类并不是说什么都没有,编译器会给该类自动生成一些默认的成员方法将编译器生成的方法称为默认的成员方法
class Date
{
public:
Date(int year, int month, int day) //构造函数
{
_year = year;
_month = month;
_day = day;
}
void Init(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
void print()
{
cout << _year << _month << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Date d(2023,2,23); //调用构造函数给成员变量赋初始值
d.print;
}
构造函数是一个特殊的成员函数,保证每个数据成员有合适的初始值
1.函数名必须与类名相同,并且不能有返回值类型
2.在创建对象时编译器有调用,只在对象的生命周期中调用一次
3.构造函数不是为了给对象创建空间,只是为了设置合适的初始值
4.构造函数可以重载
5.类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显示定义编译器将不在生成如
Date()
{}
(即没有定义构造函数时,编译器会自动生成,但无参数)
无参数的构造函数不一定没有意义(一般没有意义)
# C++语法规定:
在类中,如果用户没有显示定义任何构造函数,则编译器一定会生成一份无参的构造函数。
# 编译器实现:
在具体实现时,可能和语法稍微有些出入
因为编译器可能会考虑程序运行效率问题,如果编译器感觉生成的构造方法没有意义,则不再生成了(如果A类中包含有B类的对象,A类没有显示定义任何构造函数,而B类定义了无参的构造函数,此时编译器一定会给A类生成一个无参的构造函数)