构造函数-重载和有默认参数 同时出现的问题
代码附后,
问题 : 造成这种错误的原因是什么?
代码如下
#include <iostream>
using namespace std;
class Date
{
public:
Date(int=1,int=1,int=2005); // 此行改成 Date(int,int,int); 就顺利通过
Date(int,int);
Date(int);
Date();
void display();
private:
int month;
int day;
int year;
};
Date::Date(int m,int d,int y):month(m),day(d),year(y)
{}
Date:: Date(int m,int d):month(m),day(d)
{year=2005;}
Date::Date(int m):month(m)
{
day=1;
year=2005;
}
Date::Date()
{
month=1;
day=1;
year=2005;
}
void Date::display()
{
cout<<month<<"/"<<day<<"/"<<year<<endl;}
int main()
{
Date d1(10,13,2005);
Date d2(12,30);
Date d3(10);
Date d4;
d1.display();
d2.display();
d3.display();
d4.display();
return 0;
}
[解决办法]
Date d4;时
由于你提供了默认的参数
所以编译器不知道这里是用
Date();还是Date(int=1,int=1,int=2005); 去构造这个对象