c第5章类和对象(一)

上传人:tian****1990 文档编号:75142461 上传时间:2019-01-30 格式:PPT 页数:66 大小:526.81KB
返回 下载 相关 举报
c第5章类和对象(一)_第1页
第1页 / 共66页
c第5章类和对象(一)_第2页
第2页 / 共66页
c第5章类和对象(一)_第3页
第3页 / 共66页
c第5章类和对象(一)_第4页
第4页 / 共66页
c第5章类和对象(一)_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《c第5章类和对象(一)》由会员分享,可在线阅读,更多相关《c第5章类和对象(一)(66页珍藏版)》请在金锄头文库上搜索。

1、第五章类和对象(一),5.1 类的定义,【 5.1.1 类的概念】,类的声明形式如下: class 类名 public: 若干成员; protected: 若干成员; private: 若干成员; ;,【 5.1.2 类的定义】,5.1 类的定义,【 5.1.3 类成员的访问控制】,public: /公有成员,声明类的外部接口 void setcylinder(double r,double h); /成员函数,用来设置圆柱体的半径 和高 double getradius(); /成员函数,用来获取圆柱体的半径 double getheight(); /成员函数,用来获取圆柱体的高 doubl

2、e volume(); /成员函数,用来计算圆柱体的体积 double surface_area(); /成员函数,用来计算圆柱体的表面 积 private: /私有成员 double radius; /数据成员,声明圆柱体的半径 double height; /数据成员,声明圆柱体的高 ;,【 5.1.4 定义成员函数】,5.1 类的定义,它的一般格式如下: 返回值类型 类名:成员函数名(参数表) 函数体 ,定义类时应注意以下事项: (1)在类内不允许对所定义的数据成员进行初始化。因为类是一个数据类型,其定义以后并没有存储空间,因此,数据成员就不能进行初始化(但静态的数据成员可以在类外进行初

3、始化)。 (2)类中的数据成员的类型可以是任意的,包括整型、浮点型、字符型、数组、指针和引用等。也可以是对象即另一个类的对象,可以作为该类的成员,但自身类的对象是不可以的。 (3)一般地,在类内先说明公有成员,它们是用户关心的,后面说明私有成员。 (4)一般将类定义的说明部分或者整个定义部分(包括实现部分)放在一个头文件中。例如可把Location类的定义放在Location.h头文件中,后面引用起来比较方便。 (5)在类的说明部分之后必须加分号“;”。,5.1 类的定义,【例5.5】下面是一个“点”类的定义。 class TPoint public: void SetPoint(int x,

4、int y); int Xcoord()return X; int Ycoord()return Y; void Move(int xoffset,int yoffset); private: int X,Y; ; void TPoint:SetPoint(int x,int y) X=x; Y=y; void TPoint:Move(int xoffset,int yoffset) X+=xoffset; Y+=yoffset; ;,5.2 对象的定义,【 5.2.1对象的定义】,是待定的对象所属的类的名字,一个或多个对象名,多个对象名用逗号隔开,例如: Cylinder cylinder1

5、,cylinder2;,5.2 对象的定义,【 5.2.1对象的定义】,例如: Cylinder cylinder110;,5.2 对象的定义,【 5.2.2对象成员的表示方法】,成员选择运算符“.”用于访问一个对象的成员。例如,为访问对象A1的成员GetX(),使用如下表达式: A1.GetX( ),成员访问运算符“-”用于访问一个指针所指向的一个对象的成员。,5.2 对象的定义,【例5.6】使用类Location的程序实例。 #include void main() Location A1,A2; A1.init(5,3); A2.init(6,8); int x=A1.GetX(); i

6、nt y=A2.GetY(); / coutx“ “yendl; coutA2.GetX()“ “A2.GetY()endl; ,【 5.2.2对象成员的表示方法】,为访问对象A1的成员GetX(),使用如下表达式: A1.GetX( ),5.2 对象的定义,【 5.2.2对象成员的表示方法】,【例5.7】访问一个指针所指向的一个对象的成员。 void main() Location A1; A1.init(5,3); Location *pA1; pA1= ,程序输出如下: x=5 y=3 A1.X=5 A1.Y=3 程序中,语句: Location *pA1; 说明了一个指向locatio

7、n类型的对象的指针, 可使用运算符“&”将对象A1的地址置给该指针。,5.2 对象的定义,【 5.2.2对象成员的表示方法】,【例5.8】使用类设计模拟数字式时钟的程序。 /clock.h class Clock private: int hour,minute,second; public: void init(); void update(); void display(); ; /类Clock的实现文件 /clock.cpp #include #include “clock.h” void Clock:init() hour=minute=second=0; ,第一部分,5.2 对象的定

8、义,【 5.2.2对象成员的表示方法】,void Clock:update() second+; if(second=60) second=0; minute+; if(minute=60) minute=0; hour+; if(hour=24) hour=0; void Clock:display() couthour“:“minute“:“secondendl; ,第二部分,【 5.2.2对象成员的表示方法】,5.2 对象的定义,#include #include “clock.cpp“ void main() int i; Clock A,B; cout“A:“endl; A.init

9、(); for(i=0;i10;i+) A.update(); A.display(); cout“B:“endl; B.init(); for(i=0;i10;i+) B.update(); B.display(); ,第三部分,5.3 对象的初始化,【 5.3.1 构造函数】,5.3 对象的初始化,【 5.3.1 构造函数】,【例5.11】程序自动调用构造函数来初始化对象。 void main() test x; test y(15); /请注意这种定义与以往变量定义的区别 test array2=5,7; 执行此程序,其输出是: Initializing default Initiali

10、zing 15 Initializing 5 Initializing 7,5.3 对象的初始化,【 5.3.1 构造函数】,【例5.13】构造函数和运算符new的使用。 void main() test *ptr1=new test; test *ptr2=new test(5); delete ptr1; delete ptr2; 运算符new用于建立生存起可控的对象,new返回这个对象的指针。使用new建立动态对象的语法和建立动态变量的情况类似,其不同点是new和构造函数一同起作用。 当使用new建立一个动态对象时,new首先分配足以保存test类的一个对象所需要的内存,然后自动调用构造

11、函数来初始化这块内存,再返回这个动态对象的地址。,5.3 对象的初始化,【 5.3.1 构造函数】,不同对象的介绍: 全局对象(定义在所有函数外面的对象,具有文件作用域)在所有程序执行之前就被创建,也就是说,在程序main函数第一条语句执行时,全局对象已经被创建了,因此全局对象的构造函数在程序所有语句之前被执行。 局部动态对象(定义在程序块内,具有块作用域)在程序执行到声明该对象的语句时被创建,因此局部动态对象的构造函数是在程序执行到声明该对象的语句时被执行。 局部静态对象(定义在程序块内,用static关键字声明,具有块作用域)在程序执行到声明该对象的语句时被创建,因此同局部动态对象一样,局

12、部静态对象的构造函数在程序执行到声明该对象的语句时被执行。 动态创建的对象(用new运算符创建的)在程序执行到该语句时被动态的创建,因此动态创建对象的构造函数在程序执行到该new操作时执行。,5.3 对象的初始化,【 5.3.2 析构函数】,析构函数在对象的生存期结束时被自动调用。当对象的生存期结束时,程序为这个对象调用析构函数,并回收这个对象占用的内存。,5.3 对象的初始化,【 5.3.2 析构函数】,例:说明析构函数的行为。 /test2.cpp #include class test private: int num; float f1; public: test(); test(in

13、t n,float f); test(); ;,test:test() num=0; f1=0.0; test:test(int n,float f) num=n; f1=f; test:test() cout“destructor is active“endl; ,5.3 对象的初始化,【 5.3.2 析构函数】,各种对象的析构函数时间: 全局对象存在于程序的整个生命周期,在所有程序执行完毕后被撤销,在程序main函数最后一条语句执行完毕后或程序执行exit语句之后,全局对象的析构函数才被执行。但如果程序以abort语句终止执行,全局对象的析构函数将不被执行。 局部动态对象在退出该对象的作用

14、域(退出声明该对象的程序块)时被撤销,其析构函数也在退出该程序块时被执行。如果程序在退出该程序块之前以exit语句或abort语句终止,则局部动态对象的析构函数不会被执行。 局部静态对象创建后即存在于程序的整个生命周期,在程序执行完毕后或程序执行exit之后,局部静态对象的析构函数被执行,如果程序以abort语句终止执行,局部静态对象的析构函数在全局对象的析构函数执行之前执行。 动态创建的对象(用new操作符创建)必须动态撤销,其析构函数将在执行相应的delete操作时执行。如果程序没有显式地使用delete操作符释放动态创建的对象,该对象将不会被释放,程序就会产生内存泄漏。,5.3 对象的初

15、始化,【 5.3.2 析构函数】,【例5.16】编写一个程序输出全局对象、局部动态对象、局部静态对象和动态创建对象的构造函数与析构函数的执行时机。 /文件createanddestroy.h /定义类CreateAndDestroy #if !defined_CREATEANDDESTROY_H_ #define _CREATEANDDESTORY_H_ #include class CreateAndDestroy public: CreateAndDestroy(int n) no=n; cout“Object “no“ created!“endl; CreateAndDestroy() cout“Object “no“ destructed!“endl; private: int no; ;#endif,第 一 部 分,5.3 对象的初始化,【 5.3.2 析构函数】,/演示构造函数和析构函数的执行时机 #include“createanddestroy.h“ CreateAndDestroy one(1); main() CreateAndDestroy *ptr; /定义全局对象 CreateAndDestroy two(2);

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

当前位置:首页 > 高等教育 > 大学课件

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