计算机程序设计vc++完整精美.pptVIP

  • 40
  • 0
  • 约1.61万字
  • 约 59页
  • 2018-10-30 发布于浙江
  • 举报
计算机程序设计vc完整精美

通常情况下,析构函数无须定义,也无须调用,由系统自动产生,自动调用。 但在构造函数或程序的执行过程中,用new运算符为对象的指针成员申请了空间动态时,由于动态空间是无法自动释放的,在类中必须显式定义析构函数,并在析构函数中使用delete运算符收回为指针成员所分配的存储空间。 6.4.2 析构函数的使用 class String{ char *str; public: String(char *p){ if(p){ str=(char *)new char[strlen(p)+1]; strcpy(str,p); } else str=0; } void print(){ coutstr‘\n’; } ~String(){ if(str)delete[ ]str;} //A }; void main(){ String pp(“VC++程序设计”); pp.print();} 程序解读: 能否省略A行的“[ ] ”? 6.4.2 析构函数的使用 例6-10 在析构函数中释放动态空间。 class Obj{ int val; public: Obj(){ Obj(int i){val=i;coutval‘\t’“构造1!\n”;} ~Obj(){cout“析构1!\n”;} }; class Con{int data; Obj one,two; public: Con(int i,int j,int k): one(k),two(i+j) { data=i; coutdata‘\t’“构造2!\n”;} ~Con(){cout“析构2!\n;} }; void main(void){Con c(100,200,400); } 程序运行结果: 400 构造1! 300 构造1! 100 构造2! 析构2! 析构1! 析构1! 构造函数根据产生对象的顺序依次调用,析构函数的调用顺序通常与构造函数相反。 6.4.2 析构函数的使用 例6-11 构造函数与析构函数的调用顺序。 建立对象时调用构造函数,撤消对象时调用析构函数。不同存储类型的对象,其产生和释放情况是不一样的,调用构造函数和析构函数情况也就不同,如表7-1所示。 表7-1构造函数和析构函数的调用时间 对象类型 构造函数调用 析构函数调用 全局对象 程序运行 程序结束 局部对象 对象定义处 离开块 静态局部对象 第一次执行对象定义处 程序结束 new创建的动态对象 创建对象处 delete显式撤消 6.4.3 调用构造函数及析构函数 class Point{ int x,y; public: Point(){ x=0;y=0; cout” 全局!\t”;} Point(int a){x=a;y=0;cout” 局部!\t”;} Point(int a,int b){x=a;y=b;cout” 动态!\t”;} Point(int a,int b,int c){x=a+b;y=c; cout” 静态!\n”;} ~Point(){coutx’\t’y’\t’” 析构函数!\n”;} }P1; Point P2; void main(){ Point P3(1),*P4; P4=new Point(2,4); for(int i=0;i5;i++) static Point P5(4,6,9); delete P4; cout主函数结束!endl; } 程序运行结果: 全局! 全局! 局部! 动态! 静态! 2 4 析构函数! 主函数结束! 1 0 析构函数! 10 9 析构函数! 0 0 析构函数! 0 0 析构函数! 6.4.3 调用构造函数及析构函数 例6-12 不同类型对象构造函数和析构函数的调用 类的定义——怎样定义一个类; 构造函数——怎样初始化对象,给数据成员赋值,包括: 数据成员是普通变量时,直接赋值:数据成员=形参; 数据成员是一维数组时,用循环语句逐个元素赋值; 数据成员是二维数组时,用嵌套的循环语句逐个元素赋值; 数据成员是字符数组时,用字符串拷贝函数赋值; 数据成员是指针变量时,先为其分配动态空间,再根据动态空间的形态对动态空间赋值;不能直接对指针变量赋值。 当用已有对象初始化新建对象时,应用拷贝功能构造函数. 析构函数——释放对象空间,特别是数据成员申请了动态空间时,要用delete收回动态空间。 课堂小结 本章介绍了面向对象编程的基本概念和方法,重点: 测试函数——用定义的类说明对象,用对象调用成员函数完成测试。注意: 说明对象的参数要与构造函数的参数一致; 调用方式

文档评论(0)

1亿VIP精品文档

相关文档