void Date:init(int yy, int mm, int dd)month=(mm>=1 &&mm<=12)?mm: 1;year =(yy >= 1900 && yy <= 2100) ?yy : 1900;day =( dd >= 1 && dd <= 31 ) ? dd : 1;void Date:print_ymd()cout << year <<"," << month <<"," << day << endl;]void Date:print_mdyOcout << month <<"." << day <<"," << year << endl;}10
10 void Date::init(int yy, int mm, int dd) { month = ( mm >= 1 && mm <= 12 ) ? mm : 1; year = ( yy >= 1900 && yy <= 2100 ) ? yy : 1900; day = ( dd >= 1 && dd <= 31 ) ? dd : 1; } void Date::print_ymd() { cout << year << "-" << month << "-" << day << endl;} void Date::print_mdy() { cout << month << "-" << day << "-" << year << endl;}
intmain()使用2个不同的重载构造函数创建2个日期类对象实参在定义对象时给定,系统Date date1, date2(2016,3,1);自动调用构造函数date1.print_ymd();1900-1-1date2.print_ymd();2016-3-1date1.init(2017,3,13);2017-3-13date1.print_ymd();2017-1-28date2.init(2017,13,28);date2.print_ymd();return O;11
11 int main() { //使用2个不同的重载构造函数创建2个日期类对象 Date date1, date2(2016,3,1); //实参在定义对象时给定,系统 自动调用构造函数 date1.print_ymd(); date2.print_ymd(); date1.init(2017,3,13); date1.print_ymd(); date2.init(2017,13,28); date2.print_ymd(); return 0; }
注意事项1、无参的构造函数属于默认的构造函数,每个类只有一个默认的构造函数;例10-2中若仅定义Date(int,intint)而未定义Date(),则不可使用Datedate1;12
注意事项 1、无参的构造函数属于默认的构造函数,每个类只有一 个默认的构造函数; 2、例10-2 中若仅定义Date(int,int,int)而未定义Date(),则不 可使用 Date date1; 12
三.数据成员的初始化1在构造函数的函数体中进行初始化2在构造函数的头部初始化3.混合初始化。4.使用默认参数初始化13
13 三. 数据成员的初始化 1.在构造函数的函数体中进行初始化。 2.在构造函数的头部初始化。 3.混合初始化。 4. 使用默认参数初始化
1.在构造函数的函数体中初始化classDate当遇到声明int day,month,year;Datedate1(2006,3,28);public:时,编译器自动调用Date(int yy, int mm, int dd)构造函数LDate:Date(intyy, int mm, int dd)year=yy;month=mm;day=dd;7814
14 1. 在构造函数的函数体中初始化 class Date { int day,month,year; public: Date(int yy, int mm, int dd) { year=yy; month=mm; day=dd; } }; 当遇到声明 Date date1(2006,3,28); 时,编译器自动调用 构造函数 Date::Date(int yy, int mm, int dd)