C++第9章上教程.pptVIP

  • 2
  • 0
  • 约4.81千字
  • 约 49页
  • 2018-04-23 发布于广东
  • 举报
f (int a) { auto int b=0; static int c=3; b=b+1; c=c+1; return(a+b+c); } int main(void) { int a=2,i; for (i=0;i3;i++) printf (%d ,f(a)); return 0; } 用static 声明局部变量 7 8 9 9.2 析构函数 定义:在类名前加~作为函数名的函数,其作用与构造函数相反。 Box(); ~Box(); 没有返回值,也没有参数。它在对象结束时自动执行。 程序执行析构函数: ①auto自动局部对象:当这个函数被调用结束时,对象应该释放,在对象释放前自动执行析构函数。 ②static局部对象:在main函数结束或调用exit函数结束程序时,才调用static局部对象的析构函数。 ③全局对象:则在程序的流程离开其作用域时(如main函数结束或调用exit函数) 时,调用该全局对象的析构函数。 ④new运算符动态地建立的对象:当用delete运算符释放该对象时,先调用该对象的析构函数。 例9.5 包含构造函数和析构函数的C++程序。 本函数作用:输出 构造函数的定义 析构函数的定义 注:一个类只能有一个析构函数 对象stud1和stud2的生命期到哪结束? 9.3 调用构造函数和析构函数的顺序 一般情况下: 先构造的后析构,后构造的先析构 只适合同一类存储类别的对象 适用条件: 综合各种情况归纳如下: (1) 全局对象:它的构造函数在文件中的所有函数(包括main函数)执行之前调用。当main函数执行完毕或调用exit函数时(此时程序终止),调用析构函数。 (2) 局部自动对象:则在建立对象时调用其构造函数。如果函数被多次调用,则在每次建立对象时都要调用构造函数。在函数调用结束、对象释放时先调用析构函数。 (3) 静态(static)局部对象:则只在程序第一次调用此函数建立对象时调用构造函数一次,在main函数结束或调用exit函数结束程序时,才调用析构函数。 9.4 对象数组 一个班有50个学生,每个学生的属性包括姓名、性别、年龄、成绩等。如果为每一个学生建立一个对象,需要分别取50个对象名。 定义一个“学生类”对象数组,每一个数组元素是一个“学生类”对象。 数组(Array):是可以通过数组名和下标访问的同类型有序数据元素的集合。 一维数组定义: 类型说明符 数组名 [常量表达式]; int arr[10]; 对象数组:每一个元素都是同类的对象 对象数组定义: 类型说明符 数组名 [常量表达式]; Student stud[50]; /*假设已声明了Student类,定义stud数组,有50个元素*/ 构造函数中只有一个参数:(可在定义数组时直接提供实参) Student stud[3]={60,70,78}; 如: Student∷ Student(int=1001,int=18,int=60); Student stud[3]={1005,60,70}; 容易引起歧义 Student stud[3]={60,70,78,45}; 构造函数有多个参数: 对象数组的初始化 3个实参分别传递给3个数组元素的构造函数 实参个数不能超过数组元素个数 在定义对象数组时初始化正确的写法: Student Stud[3]={ Student(1001,18,87), Student(1002,19,76), Student(1003,18,72)}; 在建立对象数组时,分别调用构造函数,对每个元素初始化 例9.6 对象数组的使用方法。 声明有默认参数的构造函数 定义对象数组并初始化 调用a [0]的成员函数 9.5 对象指针 9.5.1 指向对象的指针 Time *pt; Time t1; // 定义t1为Time类对象 pt=t1; pt指向对象t1 定义指向类对象的指针变量的一般形式为 类名 *对象指针名; 定义pt为指向Time类对象的指针变量 通过指针访问对象和对象的成员: *pt t1 (*pt).hour pt-hour (*pt).get_time ( ) pt-get_time ( ) Time *pt; Time t1; pt=t1; pt所指向的对象中的hour成员即t1.hour pt所指向的对象中的get_time函数,即

文档评论(0)

1亿VIP精品文档

相关文档