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

xiaoxiao2021-02-28  72

#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; }

输出结果:

转载请注明原文地址: https://www.6miu.com/read-68294.html

最新回复(0)