第二部分面向对象程序设计.ppt
《第二部分面向对象程序设计.ppt》由会员分享,可在线阅读,更多相关《第二部分面向对象程序设计.ppt(50页珍藏版)》请在三一办公上搜索。
1、,第二部分面向对象程序设计,第十一章构造函数和析构函数,11,11.1 类与对象,第十一章 目 录,11.3 析构函数,11.2 构造函数,11.4 带参数的构造函数,11.5 重载构造函数,11.6 缺省构造函数,第十一章小结,11.7 拷贝构造函数,11.8 拷贝构造函数的其他用处,C+中构造函数和析构函数是类的特殊成员函数。构造函数用于创建类对象,初始化其成员。析构函数用于撤销类对象。本章介绍构造函数、析构函数、缺省构造函数、拷贝构造函数等相关内容。,第十一章 构造函数和析构函数,一个类描述一类事物,描述这些事物所应具有的属性。对象是类的一个实例,它具有确定的属性。如学生类与某学生对象。
2、类的名字只有一个,但由该类创建的对象可以任意多个。属于不同类的对象可以在不同时刻、不同环境分别创建或撤销。与定义变量相同,可定义具有不同存储属性的各类对象。定义对象时,C+编译器为其分配存储空间(如果需要)。,11.1 类与对象,例如:下面程序定义了两个类,创建了全局对象和局部对象,静态对象和堆对象。class Desk/define class Desk public:int weight;int high;int width;int length;class Stool/define class Stool public:int weight;int high;,int width;int
3、 length;Desk da;/globle object daStool sa;/globle object savoid fn()static Stool ss;/local static object Desk da;/local object/void main()Stool bs;/local object Desk*pd=new Desk;/heap object,Desk nd50;/local array of object/delete pd;/clean up object and release resources 前面已经介绍过变量定义时若未显式初始化,全局变量和静态
4、变量在定义时初值为0,局部变量在定义时初值为随机数。与定义变量不同,一旦建立一个对象,对象通常都需要有一个有意义的初值。C+建立和初始化对象的过程专门由该类构造函数完成。对象建立时,调用该构造函数,给对象分配存储空间并进行初始化。当对象撤销时,调用析构函数作善后处理。,11.2 构造函数,类创建对象时需要对对象初始化,但初始化任务,只有由成员函数完成,因此,在类中必须定义一个具有初始化功能的成员函数。每当创建一个对象时,就调用这个成员函数,实现初始化。例如:class Student public:void init()semeshours=100;gpa=3.5;,/protected:in
5、t semeshours;int gpa;void fn()Student s;s.init();/调用类的初始化函数/这种将初始化工作交由初始化成员函数完成的方式使系统多了一道处理过程,增加了书写代码,实现的机制并不理想。,另一种方法是建立对象的同时,自动调用构造函数,省去上述麻烦,使定义类对象时包含了为对象分配存储空间和初始化的双重任务。这种实现机制较为理想。由于类的唯一性和对象的多样性,因此C+规定构造函数与类同名。其特点是:Constructor is a function with the explicit purpose of initializing object.Because
6、 such a function constructs values of a given type,it is called a constructor.A constructor is recognized by having the same name as the class itself.When a class has a constructor,all objects of that class will be initialized by a constructor call.,构造函数的使用方式有:构造函数在类体内定义,例如:#include class Desk publi
7、c:Desk()weight=10;high=5;width=5;length=5;protected:int weight;int high;,int width;int length;void fn()Desk da;/constructor call/,构造函数可以在类体外定义,例如:#include class Desk public:Desk();,protected:int weight;int high;int width;int length;Desk:Desk()/constructor definition weight=10;high=5;width=5;length=5
8、;coutweight“”high“”width“”lengthendl;,void fn()Desk da;void main()fn();结果:10 5 5 5,da 对象的内存空间分配及初始化,weight,high,width,length,da,若将fn()函数改为void fn()Desk dd5;则执行定义数组语句时,构造函数将被调用5 次,即对每个数组成员对象的创建都要调用一次构造函数。,weight,high,width,length,weight,high,width,length,dd0,dd4,dd5 对象的内存空间分配及初始化,输出结果为:5 5 510 5 5 55
9、 5 510 5 5 510 5 5 5,注意:1、类体外定义构造函数,其函数名前要加上“类名:”;2、构造函数无返回类型;3、在定义时,若类的数据成员是另一个类的对象,则在调用构造函数创建对象时,对作为数据成员的对象先要自动调用其自身的构造函数。下面程序的Tutorpair类(“帮教派对”)中,其成员包含有学生类对象和老师类对象。程序说明了调用构造函数的方法。,/ch11-5.cpp#include class Student public:Student()cout“Constructing student.n”;semeshours=100;gpa=3.5;/protected:int
10、semeshours;float gpa;,class Teacher public:Teacher()cout“Constructing teacher.n”;class Tutorpair public:Tutorpair()cout“Constructing tutorpair.n”;nomeetings=0;,protected:Student student;/class object as member data Teacher teacher;/class object as member data int nomeetings;void main()Tutorpair tp;c
11、out“Back in main.n”;,运行结果:Constructing student.Constructing teacher.Constructing Tutorpair.Back in main.,当调用构造函数Tutorpair()创建的对象tp 时,首先根据对象成员被说明的次序,依次调用Student()构造函数和Teacher()构造函数创建成员对象Student 和Teacher,然后执行它自己的构造函数的函数体,如运行结果所示。,The constructor is used to initialize objects,and destructor is used to
12、clean up objects and release resources before they are become unusable.例如在下面情况下需要使用析构函数:一个对象当结束其生命期时,比如在函数体内定义的对象,当该函数调用结束时,局部对象被释放。构造函数打开一个文件,使用完文件时,需要关闭文件。从堆中分配了动态内存区,在对象消失之前必须释放。,11.3 析构函数,析构函数的特点:无返回类型;无参数;不能随意调用;不能重载。而构造函数可以有参数,也可以重载。析构函数与构造函数的功能相对应,所以析构函数名是构造函数名前加一个逻辑反运算符“”,例如:下面程序段在class Xyz
13、类中定义了一个构造函数和一个析构函数。class Xyz public:Xyz()/constructor definition name=new char20;Xyz()/destructor definition delete name;protected:char*name;,该类定义的构造函数在对象之外分配一段堆内存空间,撤销时,由析构函数收回堆内存。注意,析构函数以调用构造函数相反的顺序被调用。例如:在ch11-5.cpp 程序中为每个类增加析构函数则有:/ch11-7.cpp#include class Student public:Student()cout“Constructi
14、ng student.n”;semeshours=100;gpa=3.5;,Studeng()cout“Destructing student.n”;protected:int semeshours;float gpa;class Teacher public:Teacher()cout“Constructing teacher.n”;,Teacher()cout“Destructing teacher.n”;class Tutorpair public:Tutorpair()cout“Constructing tutorpair.n”;nomeetings=0;Tutorpair()cout
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二 部分 面向 对象 程序设计
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-4525241.html