第六讲学习目标 3.2析构函数 3.3调用构造函数和析构函数的顺序 3.4对象数组 3.5对象指针 ●25
第六讲 学习目标 3.2 析构函数 3.3 调用构造函数和析构函数的顺序 3.4 对象数组 3.5 对象指针 ⚫25
3.2析构函数 1、什么是析构函数? 析构函数(destructor)是一个特殊函数; 析构函数实现与构造函数相反的功能,就是回收在构 造函数中所申请的内存空间。使这部分内存可以被程 序分配给新对象使用。 它还可以被用来执行“用户希望在最后一次使用对 象之后所执行的任何操作”。 ●26
3.2 析构函数 1、什么是析构函数? 析构函数( destructor )是一个特殊函数; 析构函数实现与构造函数相反的功能,就是回收在构 造函数中所申请的内存空间。使这部分内存可以被程 序分配给新对象使用。 它还可以被用来执行“用户希望在最后一次使用对 象之后所执行的任何操作” 。 ⚫26
3.2析构函数-2、特点 o i 析构函数说明格式:~<类名>O: 特点: ()函数名与类名相同,只是在前边加“。”符号; (2)析构函数不得返回任何值,没有返回类型; (3)析构函数不得带有任何参数; (4)如果没有定义任何析构函数,则编译器自动为类生 成一个默认的析构函数。如:~person(0{} (5)析构函数不能被重载;一个类只能有一个析构函数。 27
3.2 析构函数-2、特点 ⚫ 析构函数说明格式:~ <类名>(); 特点: ⑴ 函数名与类名相同,只是在前边加“ ~ ”符号; ⑵ 析构函数不得返回任何值,没有返回类型; ⑶ 析构函数不得带有任何参数; ⑷ 如果没有定义任何析构函数,则编译器自动为类生 成一个默认的析构函数。 如: ~person() { } (5) 析构函数不能被重载;一个类只能有一个析构函数。 ⚫27
3.2析构函数 3、什么时候执行析构函数? 当对象的生命结束时,会自动执行它的析构函数。即当出现以下 几种情况,析构函数就会被执行: ①如果在函数中定义了一个对象,当函数调用结束时,释放对象 前自动执行析构函数。 ②static局部对象在函数调用结束时,包含的对象不会被释放,只 在main函数结束或调用exit函数时,才调用statich局部对象的析构 函数。 ③如果定义了一个全局对象,则在程序的流程离开其作用域时 (如main函数结束,或exit语句),调用该全局对象的析构函数。 ④如果用new运算符动态地建立了一个对象,当用delete运算符释 放对象时,先调用该全局对象的析构函数。 28
3.2 析构函数 3、什么时候执行析构函数? 当对象的生命结束时,会自动执行它的析构函数。即当出现以下 几种情况,析构函数就会被执行: ①如果在函数中定义了一个对象,当函数调用结束时,释放对象 前自动执行析构函数。 ② static 局部对象在函数调用结束时,包含的对象不会被释放,只 在main函数结束或调用exit函数时,才调用static局部对象的析构 函数。 ③如果定义了一个全局对象,则在程序的流程离开其作用域时 (如main函数结束,或exit语句),调用该全局对象的析构函数。 ④ 如果用new运算符动态地建立了一个对象,当用delete 运算符释 放对象时,先调用该全局对象的析构函数。 ⚫28
3.2析构函数 4、析构函数例题6.1: 1. #include <iostream.h> 1. int main() 2. class box 2. {boxb1(1,2,3);∥定义对象 3. private: 3. cout<“b1的体积=” 4. int height,width,length; 4. <<b1.volume() 5. public: 5. <endl; 6. box(int h,int w,int len /构造函数 6. boxb2(4,5,6);∥定义对象 1. height=h; width w; 7. cout<“b2的体积=” 2. length len; 8. <<b2.volume() 3. 9. <endl; 4. ~box()∥析构函数 10.cout<<“end main”<<endl; 5. {cout<<“Destructing 11.return 0; 6. a object'”<endl; 7. 8. int volume() 9. return height*width length; 10.; ●29
3.2 析构函数 1. #include <iostream.h> 2. class box 3. { private: 4. int height, width, length; 5. public: 6. box ( int h, int w, int len ) //构造函数 1. { height = h; width = w; 2. length = len; 3. } 4. ~box ( ) // 析构函数 5. { cout <<“Destructing 6. a object” << endl; 7. } 8. int volume ( ) 9. { return height * width * length; } 10. }; 1. int main ( ) 2. { box b1(1,2,3); //定义对象 3. cout <<“b1的体积=” 4. <<b1.volume( ) 5. << endl; 6. box b2(4,5,6); //定义对象 7. cout <<“b2的体积=” 8. <<b2.volume( ) 9. << endl; 10. cout<<“end main”<<endl; 11. return 0; } 4、析构函数例题6.1: ⚫29