Chapter9——分析下面的程序,写出其运行时的输出结果/将程序第5行改为Date(int=1,int=1,int=2005);修改程序使之能通过编译

来源:互联网 发布:下载淘宝游览器 编辑:程序博客网 时间:2024/05/17 22:16

#include<iostream>
using namespace std;
class Date
{
public:
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 d2(12,30);Date d3(10);Date d4;中的哪一种方式,编译器都会默认将缺省项补齐,这样就无法判断使用哪一个重载构造函数了,所以程序进行如下修改。


修改后的程序:

#include<iostream>
using namespace std;
class Date
{
public:
Date(int=1,int=1,int=2005);
void display();
private:
int month;
int day;
int year;
};
Date::Date(int m,int d,int y):month(m),day(d),year(y)
{}
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;
}

输出结果:



0 0
原创粉丝点击