1 存在一个构造函数,无参还可以调用?
#if 0
class Date
{
public:
Date(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
Date(int year, int month , int day)
{
_year = year;
_month = month;
_day = day;
}
void PrintDate()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
//调用无参构造函数
Date d0; //---此时编译错误,因为系统会生成默认的构造函数(一种无参构造函数、一种是全缺省构造函数)
Date d1(2020, 10, 12);
return 0;
}
#endif
运行结果:
结论:此时编译出错,已经写了一个构造函数,系统不会再生成无参构造函数。对于无参的构造函数和全缺省构造函数系统只能默认一个。
2 解决上述问题的方法?
1、调用无参构造函数
2、调用全缺省参数的构造函数
2.1 写一个无参构造函数进行调用
#if 0
class Date
{
public:
//解决方法
//1、自己再多写一个无参构造函数
Date()
{
}
Date(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
void PrintDate()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
//调用无参构造函数
//Date d0; ---此时编译错误,因为系统会生成默认的构造函数(一种无参构造函数、一种是全缺省构造函数)
Date d;//此时编译通过
Date d1(2020, 10, 12);
return 0;
}
2.2 直接调用全缺省参数的构造函数
#if 0
class Date
{
public:
//2、构造函数直接写成全缺省参数
Date(int year = 2021, int month = 1, int day = 1)
{
_year = year;
_month = month;
_day = day;
}
void PrintDate()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
//调用无参构造函数
//Date d0; ---此时编译错误,因为系统会生成默认的构造函数(一种无参构造函数、一种是全缺省构造函数)
//调用全缺省参数的构造函数
Date d;//此时编译通过
Date d1(2020, 10, 12);
return 0;
}
结论:解决此问题,有两种方法:
1、自己再多写一个无参构造函数
2、构造函数直接写成全缺省参数
往期链接:
cpp_8.2类和对象中(六) — 析构函数
cpp_8.1类和对象中(五) — 构造函数链接描述
cpp_8 类和对象上(四) — this遗留
cpp_7.1 类和对象上(三) — this
cpp_7类与对象上(二) — 类对象的存储方式
cpp_6.1类与对象上(一)— 类的引入