#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; }
输出结果:
