15.3构造函数和析构函数 SITY PRESS 1531构造函数 在建立一个对象时,常常需要作某些初始化的工作 (例如对数据赋予初值),C++提供了一种特殊的 成员函数—构造函数 (constructor)。这种函数与 其他成员不同,不需要用户发“消息”来激活它 而是在建立对象时自动执行。构造函数是由用户 定义的,它必须与类名同名,以便系统能识别它 并把它作为构造函数。现在我们在前面声明的类 中加入构造函数。 class stud privates:∥声明以下部分为私有的 int num; char name [10] char sex
15.3 构造函数和析构函数 15.3.1 构造函数 在建立一个对象时,常常需要作某些初始化的工作 (例如对数据赋予初值),C++提供了一种特殊的 成员函数——构造函数(constructor) 。这种函数与 其他成员不同,不需要用户发“消息” 来激活它, 而是在建立对象时自动执行。构造函数是由用户 定义的,它必须与类名同名,以便系统能识别它 并把它作为构造函数。现在我们在前面声明的类 中加入构造函数。 class stud {private: //声明以下部分为私有的 int num; char name[10]; char sex ;
public: 学出版社 TSINGHUA UNIVERSITY PRESS stU ∥定义构造函数,函数名与类名相同 {num=10010: strcpy(name, Wang-1i; Sex=F’;} ∥以上3行为给数据赋初值void display ∥定义成员函数 scout<<num: <<num<<endl; cout<<name: <<name<<endl: cout<<"sex: <<sex<<end;) stud studI ∥在定义对象stud时自动执行构造函数 注意:构造函数不需用户调用,而是在定义一个对象 时由系统自动执行,而且只能执行一次。构造函数一 般声明为 public,无返回值,也不需加void类型声明。 现在写成一个完整的程序
public: stud( ) //定义构造函数,函数名与类名相同 {num=10010; strcpy(name,"Wang-li"); sex=′F′; } //以上3行为给数据赋初值 void display( ) //定义成员函数 {cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl; } }; stud stud1; //在定义对象stud1时自动执行构造函数 注意: 构造函数不需用户调用,而是在定义一个对象 时由系统自动执行,而且只能执行一次。构造函数一 般声明为public,无返回值,也不需加void类型声明。 现在写成一个完整的程序
例15I建立一个对象,输出学生的学号、姓名、性别。 #include<string. h> #includesiostream,h> void maino i class stud ∥声明一个类 private: ∥有部分 Int num char name [10] char sex i ublic. ∥公用部分 stud() ∥定义构造函数,函数名与类名相同 {num=10010; ∥给数据赋初值 strcpy name,Wang-li) sex=F’ void display ∥定义成 员函数,输出对象的数据
例15.1 建立一个对象,输出学生的学号、姓名、性别。 #include<string.h> #include<iostream.h> void main( ) { class stud //声明一个类 {private: //私有部分 int num; char name[10]; char sex ; public: //公用部分 stud( ) //定义构造函数,函数名与类名相同 {num=10010; //给数据赋初值 strcpy(name,"Wang-li"); sex=′F′; } void display( ) //定义成 员函数,输出对象的数据
清华大学出版社 TSINGHUA UNIVERSITY PRESS scout<<num: <<num<<endl; cout<< name: <<name<<endl cout<< sex: <<sex<<end; j stud stud1 在定义对象stud时自动执行构造 函数 stud l display; ∥对象外面调用 display函数 可以看到整个程序很简单,它包括三部分:①声明 个类;②定义一个对象;③向对象发出消息, 执行对象中的成员函数 display。在定义stud1对象 时自动执行了构造函数stud(,因此对象中的数据 成员均被赋了值。执行 display函数输出以下信息:
{cout<<"num: "<<num<<endl; cout<<"name: "<<name<<endl; cout<<"sex: "<<sex<<endl; } }; stud stud1; //在定义对象stud1时自动执行构造 函数 stud1.display( ); //从对象外面调用display函数 } 可以看到整个程序很简单,它包括三部分:① 声明 一个类;② 定义一个对象;③ 向对象发出消息, 执行对象中的成员函数display。在定义stud1对象 时自动执行了构造函数stud( ),因此对象中的数据 成员均被赋了值。执行display函数输出以下信息:
清华大学出版社 TSINGHUA UNIVERSITY PRESS num:10010 name: Wang-li sex: F 在程序中可以看到只有对象中的函数才能引用本对 象中的数据。如果在对象外面直接用 cout<<stud1num 企图输出学生的学号是不行的。由此可体会到类的 特点。 如果要建立两个对象,分别对数据赋予初值,就不 能这样定义构造函数stud了,因为它会使两个学生 的初值相同,例如姓名都是 Wang-li应该分别赋 予不同的初值。可将构造函数修改如下:
num: 10010 name: Wang-li sex: F 在程序中可以看到只有对象中的函数才能引用本对 象中的数据。如果在对象外面直接用 cout<<stud1.num ; 企图输出学生的学号是不行的。由此可体会到类的 特点。 如果要建立两个对象,分别对数据赋予初值,就不 能这样定义构造函数stud了,因为它会使两个学生 的初值相同,例如姓名都是Wang-li。应该分别赋 予不同的初值。可将构造函数修改如下: