c++ 第十二章 构造函数

上传人:油条 文档编号:26873310 上传时间:2018-01-02 格式:PPT 页数:36 大小:474KB
返回 下载 相关 举报
c++ 第十二章 构造函数_第1页
第1页 / 共36页
c++ 第十二章 构造函数_第2页
第2页 / 共36页
c++ 第十二章 构造函数_第3页
第3页 / 共36页
c++ 第十二章 构造函数_第4页
第4页 / 共36页
c++ 第十二章 构造函数_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《c++ 第十二章 构造函数》由会员分享,可在线阅读,更多相关《c++ 第十二章 构造函数(36页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计,第十二章 构 造 函 数,12.1 类与对象 一个类描述一类事物,描述这些事物所应具有的属性。 一个对象是类的一个实例,它具有确定的属性。 对象的意义表达了现实世界的实体,因此,一旦建立对象,须有一个有意义的初始值。C+建立和初始化对象的过程专门由该类的构造函数来完成。只要对象建立,构造函数马上被调用,给对象分配空间和初始化。12.2 构造函数的使用 C+规定与类同名的成员函数是构造函数,在该类的对象创建时,自动被调用。 例如,下面的代码初始化桌子和凳子类对象:,#include class Desk public: Desk(); /构造函数声明 protected: int

2、 weight; int high; int width; int length;class Stool public: Stool(); /构造函数声明 protected: int weight; int high; int width; int length;,Desk:Desk() /构造函数定义 weight=10; high=5; width=5; length=5; cout weight high width length endl;Stool:Stool() /构造函数定义 weight=6; high=3; width=3; length=3; cout weight hi

3、gh width length endl;void fn() Desk da; /自动调用Desk() Stool sa; /自动调用Stool()void main() fn();,构造函数一个特殊之处是它没有返回类型,函数体中也不允许返回值。 一个类定义中,类的数据成员可能为另一个类的对象。 如果一个类对象是另一个类的数据成员,则在那个类的对象创建所调用的构造函数中,对该成员(对象)自动调用其构造函数。 例如,下面的程序,一个“帮教派对”类TutorPair,包含有学生类和老师类对象:,#include class Student public: Student() cout constr

4、ucting student.n; semesHours=100; gpa=3.5; /其他公共成员 protected: int semesHours; float gpa;class Teacher public: Teacher() cout constructing teacher.n; ;class TutorPair public: TutorPair() cout constructing tutorpair.n; noMeetings=0; protected: Student student; Teacher teacher; int noMeetings; /会晤次数;vo

5、id main() TutorPair tp; out back in main.n;,class TutorPair public: TutorPair() cout constructing tutorpair.n; noMeetings=0; protected: Student student; Teacher teacher; int noMeetings; /会晤次数;void main() TutorPair tp; cout back in main.n;12.3 析构函数 一个类可能在构造函数里分配资源,这些资源需要在对象不复存在以前被释放。析构函数允许类自动完成这些清理工作

6、。,析构函数也是特殊的成员函数,它没有返回类型,没有参数,不能随意调用。只是在类对象生命期结束的时候,由系统自动调用。 作为一个类,可能有许多对象,每当对象生命期结束时,都要调用析构函数,每个对象一次。这跟构造函数形成了鲜明的对立,所以析构函数名,就在构造函数名前加上一个逻辑非运算符“”,表示“逆构造函数”。 析构函数以调用构造函数相反的顺序被调用。 例如,下面的程序在上例的基础上加了析构函数:,#include class Student public: Student() cout constructing student.n; semesHours=100; gpa=3.5; Stude

7、nt() 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 destructing tutorpair.

8、n; protected: Student student; Teacher teacher; int noMeetings;void main() TutorPair tp; cout back in main.n;运行结果为:,12.4 带参数的构造函数 例如,下面的程序定义了一个带参数的学生类:#include #include class Student public: Student(char* pName) cout constructing student pName endl; strncpy(name,pName,sizeof(name); namesizeof(name)-

9、1=0; Student() cout destructing name endl; /其他公共成员protected: char name20;,void main() Student ss(Jenny); /. 学生类中定义了一个带字符串参数的构造函数。12.5 重载构造函数 构造函数可以被重载,C+根据声明中的参数选择合适的构造函数。 例如,下面的程序同时声明了四个构造函数:#include class Tdatepublic: Tdate(); Tdate(int d); Tdate(int m,int d); Tdate(int m,int d,int y); /其他公共成员prot

10、ected: int month; int day; int year;Tdate:Tdate() month=4; day=15; year=1995; cout month / day / year endl;Tdate:Tdate(int d) month=4; day=d; year=1996; cout month / day / year endl;Tdate:Tdate(int m,int d) month=m; day=d; year=1997; cout month / day / year endl;Tdate:Tdate(int m,int d,int y) month=

11、m; day=d; year=y; cout month / day / year endl;void main() Tdate aday; Tdate bday(10); Tdate cday(2,12); Tdate dday(1,2,1998);,Tdate:Tdate() month=4; day=15; year=1995; cout month / day / year endl;Tdate:Tdate(int d) month=4; day=d; year=1996; cout month / day / year endl;Tdate:Tdate(int m,int d) month=m; day=d; year=1997; cout month / day / year endl;Tdate:Tdate(int m,int d,int y) month=m; day=d; year=y; cout month / day / year endl;void main() Tdate aday; Tdate bday(10); Tdate cday(2,12); Tdate dday(1,2,1998);,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号