程序中对构造函数的定义也可以改写成 参数初始化表的形式: Box:Box(int h,int w,int len):height(h),width(w),length(len) {} 在构造函数中使用默认参数是方便而有效的,它提 供了建立对象时的多种选择,它的作用相当于好几 个重载的构造函数 即使在调用构造函数时没有提供实参值,不仅不会 出错,而且还确保按照默认的参数值对对象进行初 始化
程序中对构造函数的定义也可以改写成 参数初始化表的形式: Box∷Box(int h,int w,int len):height(h),width(w),length(len) { } 在构造函数中使用默认参数是方便而有效的,它提 供了建立对象时的多种选择,它的作用相当于好几 个重载的构造函数 即使在调用构造函数时没有提供实参值,不仅不会 出错,而且还确保按照默认的参数值对对象进行初 始化
9.2析构函数 析构函数(destructor)也是一个特殊的成员函数 它的作用与构造函数相反 类名的前面加一个“心”符号 件溪 当对象的生命期结束时,会自动执行析构函数 出现以下几种情况,程序就会执行析构函数: ①如果在一个函数中定义了一个对象(它是自动局部对象), 当这个函数被调用结束时,对象应该释放,在对象释放前 自动执行析构函数。 A】
9.2 析构函数 析构函数(destructor)也是一个特殊的成员函数 它的作用与构造函数相反 类名的前面加一个“~”符号 当对象的生命期结束时,会自动执行析构函数 出现以下几种情况,程序就会执行析构函数: ①如果在一个函数中定义了一个对象(它是自动局部对象), 当这个函数被调用结束时,对象应该释放,在对象释放前 自动执行析构函数
②static局部对象在函数调用结束时对象并不释放,因此也 不调用析构函数,只在main函数结束或调用exit函数结束程 序时,才调用static局部对象的析构函数 ③如果定义了一个全局对象,则在程序的流程离开其作用 域时(如main函数结束或调用exit函数)时,调用该全局对 象的析构函数 ④如果用new运算符动态地建立了一个对象,当用delete运 算符释放该对象时,先调用该对象的析构函数 析构函数的作用并不是删除对象,而是在撤销对象占用的 内存之前完成一些清理工作,使这部分内存可以被程序分 配给新对象使用
析构函数的作用并不是删除对象,而是在撤销对象占用的 内存之前完成一些清理工作,使这部分内存可以被程序分 配给新对象使用。 ②static局部对象在函数调用结束时对象并不释放,因此也 不调用析构函数,只在main函数结束或调用exit函数结束程 序时,才调用static局部对象的析构函数 ③如果定义了一个全局对象,则在程序的流程离开其作用 域时(如main函数结束或调用exit函数) 时,调用该全局对 象的析构函数 ④如果用new运算符动态地建立了一个对象,当用delete运 算符释放该对象时,先调用该对象的析构函数
析构函数不返回任何值,没有函数类型,也没有函数参数 不能被重载,一个类可以有多个构造函数,但 只能有一个析构函数。 用来执行“用户希望在最后一次使用对象之后 所执行的任何操作”,例如输出有关的信息 如果用户没有定义析构函数,C++编译系统会 自动生成一个析构函数,但它只是徒有析构函 数的名称和形式,实际上什么操作都不进行 想让析构函数完成任何工作,都必须在定义的 析构函数中指定
析构函数不返回任何值,没有函数类型,也没有函数参数 不能被重载,一个类可以有多个构造函数,但 只能有一个析构函数。 用来执行“用户希望在最后一次使用对象之后 所执行的任何操作”,例如输出有关的信息 如果用户没有定义析构函数,C++编译系统会 自动生成一个析构函数,但它只是徒有析构函 数的名称和形式,实际上什么操作都不进行 想让析构函数完成任何工作,都必须在定义的 析构函数中指定
例9.5包含构造函数和析构函数的C++程序 定义析构函数 #include<string Student() {cout<<"Destructor #include<iostream> 输出有关信息 called."<<endl; using namespace std; void display(> class Student cout<<"num: 定义成 public: "<<num<<endl; 员函数 student(int n,string nam,char s) cout<<"name: num=n; "<<name<<endl; name=nam; cout<<"sex: "<<sex<<endl<<endl; sex-s, cout<<"Constructor private: called."<<endl: int num; char name[10]; char sex;
例9.5 包含构造函数和析构函数的C++程序 #include<string> #include<iostream> using namespace std; class Student {public: student(int n,string nam,char s ) {num=n; name=nam; sex=s; cout<<″Constructor called.″<<endl; } ~Student( ) {cout<<″Destructor called.″<<endl;} void display( ) {cout<<″num: ″<<num<<endl; cout<<″name: ″<<name<<endl; cout<<″sex: ″<<sex<<endl<<endl; } 定义析构函数 输出有关信息 定义成 员函数 private: int num; char name[10]; char sex; };