清华大学郑利c4类与对象课件

上传人:枫** 文档编号:570027912 上传时间:2024-08-01 格式:PPT 页数:70 大小:260KB
返回 下载 相关 举报
清华大学郑利c4类与对象课件_第1页
第1页 / 共70页
清华大学郑利c4类与对象课件_第2页
第2页 / 共70页
清华大学郑利c4类与对象课件_第3页
第3页 / 共70页
清华大学郑利c4类与对象课件_第4页
第4页 / 共70页
清华大学郑利c4类与对象课件_第5页
第5页 / 共70页
点击查看更多>>
资源描述

《清华大学郑利c4类与对象课件》由会员分享,可在线阅读,更多相关《清华大学郑利c4类与对象课件(70页珍藏版)》请在金锄头文库上搜索。

1、第四章第四章 类与对象类与对象C+语言程序设计1清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉本章主要内容本章主要内容l面向对象的思想面向对象的思想lOOP的基本特点的基本特点l类概念和声明类概念和声明l对象对象l构造函数构造函数l析构函数析构函数l内联成员函数内联成员函数l拷贝构造函数拷贝构造函数l类的组合类的组合2清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉回顾:面向过程的设计方法回顾:面向过程的设计方法l重点重点:如何实现细节过程,将数据与函数分开。l形式:形式:主模块+若干个子模块(main()+子函数)。l特点:特点:自顶向下,逐步求精功能分解。l缺点:缺点:效率低

2、,程序的可重用性差。面向对象的思想3清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉面向对象的方法面向对象的方法l目的:目的:实现软件设计的产业化。l观点:观点:自然界是由实体(对象)所组成。l程序设计方法:程序设计方法:使用面向对象的观点来描述模仿并处理现实问题。l要求:要求:高度概括、分类、和抽象。面向对象的思想4清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉抽象抽象抽象是对具体对象(问题)进行概括,抽象是对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述抽出这一类对象的公共性质并加以描述的过程。的过程。先注意问题的本质及描述,其次是实现过程或细节。数据抽象:描述

3、某类对象的属性或状态(对象相互区别的物理量)。代码抽象:描述某类对象的共有的行为特征或具有的功能。抽象的实现:通过类的声明。OOP的基本特点5清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉抽象实例抽象实例钟表钟表l数据抽象:数据抽象:int Hour, int Minute, int Secondl代码抽象:代码抽象:SetTime(), ShowTime()OOP的基本特点6清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉抽象实例抽象实例钟表类钟表类class Clock public: void SetTime(int NewH, int NewM, int NewS); v

4、oid ShowTime(); private: int Hour,Minute,Second;OOP的基本特点7清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉抽象实例抽象实例人人l数据抽象:数据抽象:char *name,char *gender,int age,int idl代码抽象:代码抽象:生物属性角度:GetCloth(), Eat(), Step(),社会属性角度:Work(), Promote() ,OOP的基本特点8清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉封装封装将抽象出的数据成员、代码成员相结将抽象出的数据成员、代码成员相结合,将它们视为一个整体。合,将

5、它们视为一个整体。目的是曾强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。实现封装:类声明中的OOP的基本特点9清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉封装封装l实例:实例:class Clock public: void SetTime(int NewH,int NewM, int NewS); void ShowTime(); private: int Hour,Minute,Second;边界特定的访问权限OOP的基本特点外部接口10清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉继承与派生继承与派生是是C+中

6、支持层次分类的一种机制,中支持层次分类的一种机制,允许程序员在保持原有类特性的基础上,允许程序员在保持原有类特性的基础上,进行更具体的说明。进行更具体的说明。实现:声明派生类实现:声明派生类第七章第七章OOP的基本特点11清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉多态性多态性l多态:同一名称,不同的功能实现方式。多态:同一名称,不同的功能实现方式。l目的:达到行为标识统一,减少程序中标目的:达到行为标识统一,减少程序中标识符的个数。识符的个数。l实现:重载函数和虚函数实现:重载函数和虚函数第八章第八章OOP的基本特点12清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉c+中的

7、类中的类l类是具有相同属性和行为的一组对象类是具有相同属性和行为的一组对象的集合,它为属于该类的全部对象提的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属供了统一的抽象描述,其内部包括属性和行为两个主要部分。性和行为两个主要部分。l利用类可以实现数据的封装、隐藏、利用类可以实现数据的封装、隐藏、继承与派生。继承与派生。l利用类易于编写大型复杂程序,其模利用类易于编写大型复杂程序,其模块化程度比块化程度比C中采用函数更高。中采用函数更高。类 和 对 象13清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉类的声明形式类的声明形式 类是一种用户自定义类型,声明形式:类是一种用户

8、自定义类型,声明形式:class 类名称 public: 公有成员(外部接口) private: 私有成员 protected: 保护型成员类 和 对 象14清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉公有类型成员公有类型成员在关键字在关键字public后面声明,它们是类后面声明,它们是类与外部的接口,任何外部函数都可以访与外部的接口,任何外部函数都可以访问公有类型数据和函数。问公有类型数据和函数。类 和 对 象15清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉私有类型成员私有类型成员在关键字在关键字private后面声明,只允许后面声明,只允许本类中的函数访问,而类外部的任

9、何函本类中的函数访问,而类外部的任何函数都不能访问。数都不能访问。如果紧跟在类名称的后面声明私有成员,如果紧跟在类名称的后面声明私有成员,则关键字则关键字privateprivate可以省略。可以省略。类 和 对 象16清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉保护类型保护类型与与private类似,其差别表现在继承与类似,其差别表现在继承与派生时对派生类的影响不同,第七章讲。派生时对派生类的影响不同,第七章讲。类 和 对 象17清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉类的成员类的成员class Clock public: void SetTime(int NewH,

10、 int NewM, int NewS); void ShowTime(); private: int Hour, Minute, Second;类 和 对 象成员数据成员函数18清华大学郑利c4类与对象void Clock : SetTime(int NewH, int NewM, int NewS) Hour=NewH; Minute=NewM; Second=NewS;void Clock : ShowTime() coutHour:Minute:Second;19 19清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉成员数据成员数据l与一般的变量声明相同,但需要将它与一般的变量声

11、明相同,但需要将它放在类的声明体中。放在类的声明体中。类 和 对 象20清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉成员函数成员函数l在类中说明原形,可以在类外给出函数在类中说明原形,可以在类外给出函数体实现,并在函数名前使用类名加以限体实现,并在函数名前使用类名加以限定。也可以直接在类中给出函数体,形定。也可以直接在类中给出函数体,形成内联成员函数。成内联成员函数。l允许声明重载函数和带默认形参值的函允许声明重载函数和带默认形参值的函数数类 和 对 象21清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉内联成员函数内联成员函数l为了提高运行时的效率,对于较简单为了提高运行时的

12、效率,对于较简单的函数可以声明为内联形式。的函数可以声明为内联形式。l内联函数体中不要有复杂结构(如循内联函数体中不要有复杂结构(如循环语句和环语句和switch语句)。语句)。l在类中声明内联成员函数的方式:在类中声明内联成员函数的方式:将函数体放在类的声明中。使用inline关键字。类 和 对 象22清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉内联成员函数举例内联成员函数举例(一一)class Point public: void Init(int initX,int initY) X=initX; Y=initY; int GetX() return X; int GetY()

13、 return Y; private: int X,Y;类 和 对 象23清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉内联成员函数举例内联成员函数举例(二二)class Point public: void Init(int initX,int initY); int GetX(); int GetY(); private: int X,Y;类 和 对 象24清华大学郑利c4类与对象inline void Point: Init(int initX,int initY) X=initX; Y=initY;inline int Point:GetX() return X;inline

14、int Point:GetY() return Y;25 25清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉对象对象l类的对象是该类的某一特定实体,即类的对象是该类的某一特定实体,即类类型的变量。类类型的变量。l声明形式:声明形式: 类名类名 对象名;对象名;l例:例: Clock myClock;类 和 对 象26清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉类中成员的访问方式类中成员的访问方式l类中成员互访类中成员互访直接使用成员名l类外访问类外访问使用“对象名.成员名”方式访问 public 属性的成员类 和 对 象27清华大学郑利c4类与对象C+语言程序设计清华大学 郑

15、莉例例4-1类的应用举例类的应用举例#includeusing namespace std;class Clock ./类的声明略类的声明略/.类的实现略类的实现略void main(void) Clock myClock; myClock.SetTime(8,30,30); myClock.ShowTime();类 和 对 象28清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉构造函数构造函数l构造函数的作用是在对象被创建时使构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象用特定的值构造对象,或者说将对象初始化初始化为一个特定的状态。为一个特定的状态。l在对象创建时在对

16、象创建时由系统自动调用由系统自动调用。l如果程序中未声明,则系统自动产生如果程序中未声明,则系统自动产生出一个出一个默认形式默认形式的构造函数的构造函数l允许为允许为内联内联函数、函数、重载重载函数、函数、带默认带默认形参值形参值的函数的函数构造函数和析构函数29清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉构造函数举例构造函数举例class Clockpublic:Clock (int NewH, int NewM, int NewS);/构造函数构造函数void SetTime(int NewH, int NewM, int NewS);void ShowTime();privat

17、e:int Hour,Minute,Second;构造函数和析构函数30清华大学郑利c4类与对象构造函数的实现:构造函数的实现:Clock:Clock(int NewH, int NewM, int NewS)Hour= NewH;Minute= NewM;Second= NewS;建立对象时构造函数的作用:建立对象时构造函数的作用:void main() Clock c (0,0,0); /隐含调用构造函数,将初始值作为实参。隐含调用构造函数,将初始值作为实参。 c.ShowTime();31 31清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉拷贝构造函数拷贝构造函数拷贝构造函数是一

18、种特殊的构造函数,其形参为拷贝构造函数是一种特殊的构造函数,其形参为本类的对象引用。本类的对象引用。class 类名 public : 类名(形参);/构造函数 类名(类名 &对象名);/拷贝构造函数 .;类名: 类名(类名 &对象名)/拷贝构造函数的实现 函数体 构造函数和析构函数32清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉例例4-2 拷贝构造函数举例拷贝构造函数举例class Point public: Point(int xx=0,int yy=0)X=xx; Y=yy; Point(Point& p); int GetX() return X; int GetY() re

19、turn Y; private: int X,Y;构造函数和析构函数33清华大学郑利c4类与对象Point:Point (Point& p) X=p.X; Y=p.Y; cout拷贝构造函数被调用拷贝构造函数被调用endl;34 34清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉例例4-2 拷贝构造函数举例拷贝构造函数举例l当用类的一个对象去初始化该类的另一个当用类的一个对象去初始化该类的另一个对象时系统自动调用拷贝构造函数实现拷对象时系统自动调用拷贝构造函数实现拷贝赋值。贝赋值。void main(void) Point A(1,2); Point B(A); /拷贝构造函数被调用拷

20、贝构造函数被调用 coutB.GetX()endl;构造函数和析构函数35清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉例例4-2拷贝构造函数举例拷贝构造函数举例l若函数的形参为类对象,调用函数时,若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝实参赋值给形参,系统自动调用拷贝构造函数。例如:构造函数。例如:void fun1(Point p) coutp.GetX()endl; void main() Point A(1,2); fun1(A); /调用拷贝构造函数调用拷贝构造函数 构造函数和析构函数36清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉拷贝构造

21、函数拷贝构造函数(例例4-2)l当函数的返回值是类对象时,系统自动调用当函数的返回值是类对象时,系统自动调用拷贝构造函数。例如:拷贝构造函数。例如:Point fun2() Point A(1,2); return A; /调用拷贝构造函数调用拷贝构造函数void main() Point B; B=fun2(); 构造函数和析构函数37清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉拷贝构造函数拷贝构造函数如果程序员没有为类声明拷贝初始如果程序员没有为类声明拷贝初始化构造函数,则编译器自己生成一个拷化构造函数,则编译器自己生成一个拷贝构造函数。贝构造函数。这个构造函数执行的功能是:用作

22、这个构造函数执行的功能是:用作为初始值的对象的每个数据成员的值,为初始值的对象的每个数据成员的值,初始化将要建立的对象的对应数据成员。初始化将要建立的对象的对应数据成员。构造函数和析构函数38清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉析构函数析构函数l完成对象被删除前的一些清理工作。完成对象被删除前的一些清理工作。l在对象的生存期结束的时刻系统自动在对象的生存期结束的时刻系统自动调用它,然后再释放此对象所属的空调用它,然后再释放此对象所属的空间。间。l如果程序中未声明析构函数,编译器如果程序中未声明析构函数,编译器将自动产生一个默认的析构函数。将自动产生一个默认的析构函数。构造函数

23、和析构函数39清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉构造函数和析构函数举例构造函数和析构函数举例#includeusing namespace std;class Point public: Point(int xx,int yy); Point(); /.其它函数原形其它函数原形 private: int X,int Y;构造函数和析构函数40清华大学郑利c4类与对象Point:Point(int xx,int yy) X=xx; Y=yy;Point:Point()/.其它函数的实现略其它函数的实现略41 41清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉类的应用举

24、例类的应用举例(例例4-3)一圆型游泳池如图所示,现在需在其周围建一圆型游泳池如图所示,现在需在其周围建一圆型过道,并在其四周围上栅栏。栅栏价格为一圆型过道,并在其四周围上栅栏。栅栏价格为35元元/米,过道造价为米,过道造价为20元元/平方米。过道宽度为平方米。过道宽度为3米,游泳池半径由键盘输入。要求编程计算并米,游泳池半径由键盘输入。要求编程计算并输出过道和栅栏的造价。输出过道和栅栏的造价。游泳池过道42清华大学郑利c4类与对象#include using namespace std;const float PI = 3.14159;const float FencePrice = 35;

25、const float ConcretePrice = 20;/声明类声明类Circle 及其数据和方法及其数据和方法class Circle private: float radius; public: Circle(float r); /构造函数构造函数 float Circumference() const; /圆周长圆周长 float Area() const; /圆面积圆面积;43 43清华大学郑利c4类与对象/ 类的实现类的实现/ 构造函数初始化数据成员构造函数初始化数据成员radiusCircle:Circle(float r)radius=r/ 计算圆的周长计算圆的周长floa

26、t Circle:Circumference() const return 2 * PI * radius; / 计算圆的面积计算圆的面积 float Circle:Area() const return PI * radius * radius;44 44清华大学郑利c4类与对象void main () float radius; float FenceCost, ConcreteCost; / 提示用户输入半径提示用户输入半径 coutradius; / 声明声明 Circle 对象对象 Circle Pool(radius); Circle PoolRim(radius + 3); 45

27、 45清华大学郑利c4类与对象/ 计算栅栏造价并输出计算栅栏造价并输出 FenceCost = PoolRim.Circumference() * FencePrice; cout Fencing Cost is ¥ FenceCost endl; / 计算过道造价并输出计算过道造价并输出 ConcreteCost = (PoolRim.Area() - Pool.Area()*ConcretePrice; cout Concrete Cost is ¥ ConcreteCost yabbaDabbaDo();/错误:错误:Fred类的对象在定义之前被使用类的对象在定义之前被使用 privat

28、e: Fred* x; /正确,经过前向引用声明,可以声明正确,经过前向引用声明,可以声明Fred类的对象指针类的对象指针 ; class Fred public: void yabbaDabbaDo(); private: Barney* y; ; 类 的 组 合58清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉前向引用声明注意事项前向引用声明注意事项l应该记住:当你使用前向引用声明时,应该记住:当你使用前向引用声明时,你只能使用被声明的符号,而不能涉你只能使用被声明的符号,而不能涉及类的任何细节。及类的任何细节。类 的 组 合59清华大学郑利c4类与对象C+语言程序设计清华大学 郑

29、莉UML简介简介lUML语言是一种可视化的的面向对象建模语言是一种可视化的的面向对象建模语言。语言。lUML有三个基本的部分有三个基本的部分事物(Things)UML中重要的组成部分,在模型中属于最静态的部分,代表概念上的或物理上的元素关系(Relationships)关系把事物紧密联系在一起图(Diagrams)图是很多有相互相关的事物的组UML图形标识60清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉UML中有中有4种类型的事物种类型的事物l结构事物(结构事物(Structural things)l动作事物(动作事物(Behavioral things)l分组事物(分组事物(Gro

30、uping things)l注释事物(注释事物(Annotational things)UML图形标识61清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉UML中的关系中的关系l依赖(依赖(Dependencies) l关联(关联(Association) l泛化(泛化(generalization) l实现(实现(realuzation)UML图形标识62清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉UML中的中的9种图种图l类图(类图(class diagram)l对象图(对象图(class diagram)l用例图(用例图(Use case diagram)l顺序图(顺序图

31、(Sequence diagram)l协作图(协作图(Collaboration diagram)l状态图(状态图(Statechart diagram)l活动图(活动图(Activity diagram)l组件图(组件图(Compomnent diagram)l实施图(实施图(Deployment diagram)UML图形标识63清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉类图类图l举例:举例:Clock类的完整表示类的完整表示lClock类的简洁表示类的简洁表示Clock- Hour : int- Minute : int- Second : int+ ShowTime() :

32、 void+ SetTime(NewH : int = 0, NewM : int = 0, NewS : int = 0) : voidClockUML图形标识64清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉对象图对象图myClock : Clock- Hour : int- Minute : int- Second : intmyClock : ClockUML图形标识65清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉类与对象关系的图形标识类与对象关系的图形标识l依赖关系依赖关系图中的“类A”是源,“类B”是目标,表示“类A”使用了“类B”,或称“类A”依赖“类B”类 A

33、类 BUML图形标识66清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉类与对象关系的图形标识类与对象关系的图形标识l作用关系作用关系关联关联图中的“重数A”决定了类B的每个对象与类A的多少个对象发生作用,同样“重数B”决定了类A的每个对象与类B的多少个对象发生作用。类 A重数A类 B重数BUML图形标识67清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉类与对象关系的图形标识类与对象关系的图形标识l包含关系包含关系聚集和组合聚集和组合类 A类 B重数A重数B类 A类 B重数A重数B聚集表示类之间的关系是整体与部分的关系,“包含”、“组成”、“分为部分”等都是聚集关系。UML图形标识68清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉类与对象关系的图形标识类与对象关系的图形标识l继承关系继承关系泛化泛化父类 A父类 B子类 1子类 2UML图形标识69清华大学郑利c4类与对象C+语言程序设计清华大学 郑莉注释注释l在在UML图形上,注释表示为带有褶角图形上,注释表示为带有褶角的矩形,然后用虚线连接到的矩形,然后用虚线连接到UML的其的其他元素上,它是一种用于在图中附加他元素上,它是一种用于在图中附加文字注释的机制。文字注释的机制。注释文字UML图形标识70清华大学郑利c4类与对象

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

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