a1在例??其神上定)构造成员函数 #include <iostream> using namespace std; void Time:set time() class Time cin>>hour; public: 定义构造函 给成员变 cin>>minute; Time() 数,函数名 量赋值 与类名相同 cin>>sec; (hour-0; minute-0; sec-0; 数据成员 赋初值 void Time:show time() void set time(); cout<<hour<<""<<minute<<" void show time() rivate: "<<sec<<endl; int hour; /私有数据成员 int minute; int sec;
例9.1 在例8.3基础上定义构造成员函数 #include <iostream> using namespace std; class Time {public: Time( ) {hour=0; minute=0; sec=0; } void set_time( ); void show_time( ); private: int hour; //私有数据成员 int minute; int sec; }; 定义构造函 数,函数名 与类名相同 数据成员 赋初值 void Time∷set_time( ) {cin>>hour; cin>>minute; cin>>sec; } void Time∷show_time( ) { cout<<hour<<″:″<<minute<<″ :″<<sec<<endl; } 给成员变 量赋值
建立对象t1,同时调用构 int main( 造函数t1.Time() Time t1; t1.set time() t1.show_time(); 虞 Time t2;- 建立对象1,同时调用构 造函数tl.Time() t2.show time() return 0; 程序运行的情况为: 102554 (从键盘输入新值赋给t1的数据成员) 10:25:54 (输出t1的时、分、秒值) 0:0:0 〔输出t2的时、分、秒值)
int main( ) {Time t1; t1.set_time( ); t1.show_time( ); Time t2; t2.show_time( ); return 0; } 建立对象t1,同时调用构 造函数t1.Time( ) 建立对象t1,同时调用构 造函数t1.Time( ) 程序运行的情况为: 10 25 54↙ (从键盘输入新值赋给t1的数据成员) 10:25:54 (输出t1的时、分、秒值) 0:0:0 (输出t2的时、分、秒值)
在类内对构造函数进行声明而在类外定义构造函数 Time(); 对构造函数在类内进行声明 在类外定义构造函数: Time:Time() hour-0; 得 minute-0; 在类外定义构造成员函 sec-0; 数,要加上类名Time 和域限定符“:
在类内对构造函数进行声明而在类外定义构造函数 Time( ); Time∷Time( ) {hour=0; minute=0; sec=0; } 在类外定义构造函数: 对构造函数在类内进行声明 在类外定义构造成员函 数,要加上类名Time 和域限定符“∷
int main() (1)在类对象进入其作用时调用构造函数 Time t1; t1.set time() (3)构造函数不需用户调用, 也不能被用户调用 t1.show time(); Time t2; (⑤)如果用户自己没有定义构造函数, t2.show_time(); 则C++会自动生成一个构造函数,只 return 0; 是这个构造函数的函数体是空的,也 没有参数,不执行初始化操作。 (2)与一般函数的一个重要的不同之点 Time:Time() 是没有返回值,因此也不需要在定义 hour-0; 构造函数时声明类型 minute-0; (4)在构造函数体中不仅可对数据成员 sec=0; 赋初值,而且可包含其他语句。但是 般不提倡在构造函数中加入与初始 化无关的内容,以保持程序的清晰
int main( ) {Time t1; t1.set_time( ); t1.show_time( ); Time t2; t2.show_time( ); return 0; } Time∷Time( ) {hour=0; minute=0; sec=0; } (1) 在类对象进入其作用时调用构造函数 (2) 与一般函数的一个重要的不同之点 是没有返回值,因此也不需要在定义 构造函数时声明类型 (3) 构造函数不需用户调用, 也不能被用户调用 (4) 在构造函数体中不仅可对数据成员 赋初值,而且可包含其他语句。但是 一般不提倡在构造函数中加入与初始 化无关的内容,以保持程序的清晰。 (5) 如果用户自己没有定义构造函数, 则C++会自动生成一个构造函数,只 是这个构造函数的函数体是空的,也 没有参数,不执行初始化操作
9.1.3带参数的构造函数 用户希望对不同的对象赋予不同的初值时可以采用 带参数的构造函数 构造函数首部的一般格式为: 构造函数名(类型1形参1,类型2形参2,.) 用户是不能调用构造函数的,因此无法采用常规的调用 函数的方法给出实参。 实参是在定义对象时给出的 定义对象的一般格式为: 类名对象名(实参1,实参2,);
类名 对象名(实参1,实参2,.); 9.1.3 带参数的构造函数 用户是不能调用构造函数的,因此无法采用常规的调用 函数的方法给出实参。 用户希望对不同的对象赋予不同的初值时可以采用 带参数的构造函数 构造函数首部的一般格式为: 构造函数名(类型 1 形参1,类型2 形参2,.) 实参是在定义对象时给出的 定义对象的一般格式为: