C++: error: call of overloaded 'Data(int, int)' is ambiguous

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;
}
我建议你可以看一下前面的内容,在使用默认参数的构造函数这一章有讲的。
默认参数的作用相当于好几个构造函数,因此在一个类中定义了全部是默认参数的构造函数后,不可以再定义重造构造函数,避免二义性。
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值