C++: error: call of overloaded ‘Data(int, int)’ is ambiguous
习题 3.3 如果将第2题中程序的第4行改为用默认参数,即Date(int=1, int=1, int=2005); 分析程序有无问题。要求保留上面一行给出的构造函数,同时能输出与第2题的程序。
1、改正的代码如下:
#include<iostream>
using namespace std;
class Data
{public:
Data(int =1,int =1,int =2005);
//Data(int,int);
//Data(int);
//Data();
void display();
private:
int mouth;
int year;
int day;
};
Data::Data(int m,int d,int y):mouth(m),day(d),year(y){}
//Data::Data(int m,int d):mouth(m),day(d){year=2005;}
//Data::Data(int m):mouth(m){day=1;year=2005;}
//Data::Data(){mouth=1;day=1;year=2005;}
void Data::display()
{cout<<mouth<<"/"<<day<<"/"<<year<<endl;}
int main()
{Data d1(10,13,2005);
Data d2(12,30);
Data d3(10);
Data d4;
d1.display();
d2.display();
d3.display();
d4.display();
return 0;
};
如果我们换一种颜色你可能会觉得舒服一点。
#include<iostream>
using namespace std;
class Data
{public:
Data(int =1,int =1,int =2005);
//Data(int,int);
//Data(int);
//Data();
void display();
private:
int mouth;
int year;
int day;
};
Data::Data(int m,int d,int y):mouth(m),day(d),year(y){}
//Data::Data(int m,int d):mouth(m),day(d){year=2005;}
//Data::Data(int m):mouth(m){day=1;year=2005;}
//Data::Data(){mouth=1;day=1;year=2005;}
void Data::display()
{cout<<mouth<<"/"<<day<<"/"<<year<<endl;}
int main()
{Data d1(10,13,2005);
Data d2(12,30);
Data d3(10);
Data d4;
d1.display();
d2.display();
d3.display();
d4.display();
return 0;
}