版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第四讲第四讲 类与对象类与对象中国地质大学中国地质大学(武汉武汉)计算机学院计算机学院何珍文何珍文面向对象程序设计(A)2本章主要内容本章主要内容*l面向对象的思想面向对象的思想lOOP及其基本特点及其基本特点l类概念和声明类概念和声明l对象对象l构造函数构造函数l析构函数析构函数l拷贝构造函数拷贝构造函数l内联成员函数内联成员函数l类的聚集类的聚集l静态成员静态成员l友元友元lthis3回顾:面向过程的设计方法回顾:面向过程的设计方法l重点重点: 如何实现细节过程,将数据与函数分开。l形式:形式: 主模块+若干个子模块(main( )+子函数)。l特点:特点: 自顶向下,逐步求精功能分解。
2、l缺点:缺点: 效率低,可维护性差,可重用性差。一 面向对象的思想4面向对象的方法面向对象的方法l目的:目的: 高效快捷地实现软件设计的产业化。l观点:观点: 自然界是由实体(对象)所组成。l程序设计方法:程序设计方法: 使用面向对象的观点来描述模仿并处理现实问题。l要求:要求: 高度概括、分类、和抽象。面向对象的思想面向对象(Object Oriented, OO)是当前计算机界关心的重点,它是20世纪90年代以来软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等
3、领域。面向对象的基本概念面向对象的基本概念面向对象的思想l对象:对象:现实世界中的各种具体的或抽象的现实世界中的各种具体的或抽象的“事物事物” F简单对象简单对象:简单类型的对象。如:简单类型的对象。如int类型的常量或变量。类型的常量或变量。F复杂对象复杂对象:复杂类型的对象。如用:复杂类型的对象。如用class、struct和和union定定义的类型的常量或变量。义的类型的常量或变量。函数成员操作行为数据成员属性特征程序设计程序设计对象模型对象模型现实世界现实世界面向对象的基本概念面向对象的基本概念l人类的定义:人类的定义:struct HUMANKINDchar *name;double
4、 weight;public:void eat( );void wear( );void reside( );void travel( ); ;人类的实例:人类的实例:HUMANKIND Zhang; 特征、属性、数据成员特征、属性、数据成员行为、操作、函数成员行为、操作、函数成员面向对象的基本概念面向对象的基本概念8面向对象程序设计(面向对象程序设计(OOP)l面向对象程序设计的四个阶段面向对象程序设计的四个阶段:系统分析,系统设系统分析,系统设计,对象设计,对象实现。计,对象设计,对象实现。系统分析:理解应用系统的定义及建立应用系统的对象模型。分析和发现对象,定义对象的属性和内部状态变换,
5、定义外部事件和对象之间的联系及约束,最终建立应用系统的对象模型、动态模型及功能模型。 系统设计:确立对象模型的实现方法。分解系统,确定系统固有的并发性,分配处理器的任务,选择数据存储的管理手段,处理全局资源的访问,确立应用系统的边界。 二 OOP及其基本特点9l面向对象程序设计的四个阶段(续)面向对象程序设计的四个阶段(续):对象设计:将系统分析阶段建立的三种模型转换成类。将对象模型转换为类的属性,将动态模型转换为类的方法,将功能模型转换为主控或子控模块。转换对象模型时要考虑对象关联;转换动态模型应选用事件驱动;转换功能模型时用顺序或事件驱动实现流程控制。对象实现:用面向对象的程序设计语言实现
6、对象设计阶段定义的类。选择合适的程序语言及开发环境,定义类的属性及其方法,编写主控模块及子控模块,针对具体语言进行性能调整。面向对象程序设计(面向对象程序设计(OOP)二 OOP及其基本特点10抽象抽象抽象是对具体对象(问题)进行概括,抽象是对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述抽出这一类对象的公共性质并加以描述的过程。的过程。 先注意问题的本质及描述,其次是实现过程或细节。 属性抽象:描述某类对象的属性或状态(对象相互区别的物理量)。 行为抽象:描述某类对象的共有的行为特征或具有的功能。 抽象的实现:通过类的声明。 OOP的基本特点11抽象实例抽象实例钟表钟表l属性抽
7、象:属性抽象:int Hour, int Minute, int Secondl行为抽象:行为抽象:setTime( ), showTime( )OOP的基本特点12抽象实例抽象实例钟表类钟表类class Clock public: void setTime(int NewH, int NewM, int NewS); void showTime( ); private: int Hour,Minute,Second;OOP的基本特点13抽象实例抽象实例人人l属性抽象:属性抽象:char *name,char *sex,int age,int idl行为抽象:行为抽象:生物属性角度:getCl
8、oth( ), eat( ), step( ),社会属性角度:work( ), promote( ) ,OOP的基本特点14封装封装将抽象出的属性成员、行为成员相结将抽象出的属性成员、行为成员相结合,将它们视为一个整体。合,将它们视为一个整体。 目的是曾强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。 实现封装:类声明中的OOP的基本特点15封装封装l实例:实例:class Clock public: void setTime(int NewH,int NewM, int NewS); void showTime( ); private
9、: int Hour,Minute,Second;边界特定的访问权限OOP的基本特点外部接口16继承与派生继承与派生是是C+中支持层次分类的一种机制,中支持层次分类的一种机制,允许程序员在保持原有类特性的基础上,允许程序员在保持原有类特性的基础上,进行更具体的说明。进行更具体的说明。实现:声明派生类实现:声明派生类OOP的基本特点17多态性多态性l多态:同一名称,不同的功能实现方式。多态:同一名称,不同的功能实现方式。l目的:达到行为标识统一,减少程序中标目的:达到行为标识统一,减少程序中标识符的个数。识符的个数。l实现:重载函数和虚函数实现:重载函数和虚函数OOP的基本特点18OOP的基本特
10、点 OOP的四个基本特征的四个基本特征(小结小结): 抽象 封装 继承 多态对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述的过程。将抽象出的数据及方法结合为一个整体的信息隐蔽技术。对具有层次关系的类的数据和操作进行共享的一种方式。不同的对象接受同一消息时产生不同的行动的现象。19c+中的类中的类l类是具有相同属性和行为的一组对象类是具有相同属性和行为的一组对象的集合,它为属于该类的全部对象提的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属供了统一的抽象描述,其内部包括属性和行为两个主要部分。性和行为两个主要部分。l利用类可以实现数据的封装、隐藏、利用类可以实现数
11、据的封装、隐藏、继承与派生。继承与派生。l利用类易于编写大型复杂程序,其模利用类易于编写大型复杂程序,其模块化程度比块化程度比C中采用函数更高。中采用函数更高。三 类 和 对 象20类的声明形式类的声明形式 类是一种用户自定义类型,声明形式:类是一种用户自定义类型,声明形式:class 类名称 public: 公有成员(外部接口) private: 私有成员 protected: 保护型成员类 和 对 象21公有类型成员公有类型成员在关键字在关键字public后面声明,它们是类后面声明,它们是类与外部的接口,任何外部函数都可以访与外部的接口,任何外部函数都可以访问公有类型数据和函数。问公有类型
12、数据和函数。22私有类型成员私有类型成员在关键字在关键字private后面声明,只允许后面声明,只允许本类中的函数访问,而类外部的任何函本类中的函数访问,而类外部的任何函数都不能访问。数都不能访问。如果紧跟在类名称的后面声明私有成员,如果紧跟在类名称的后面声明私有成员,则关键字则关键字privateprivate可以省略。可以省略。23保护类型保护类型与与private类似,其差别表现在继承与类似,其差别表现在继承与派生时对派生类的影响不同,后面章讲。派生时对派生类的影响不同,后面章讲。24类的成员类的成员class Clock public: void setTime(int NewH, i
13、nt NewM, int NewS); void showTime( ); private: int Hour, Minute, Second;类 和 对 象成员变量成员函数void Clock : setTime(int NewH, int NewM, int NewS) Hour=NewH; Minute=NewM; Second=NewS;void Clock : showTime( ) coutHour:Minute:Second;26成员变量成员变量l与一般的变量声明相同,但需要将它与一般的变量声明相同,但需要将它放在类的声明体中。放在类的声明体中。27成员函数成员函数l在类中说明原
14、形,可以在类外给出函在类中说明原形,可以在类外给出函数体实现,并在函数名前使用类名加数体实现,并在函数名前使用类名加以限定。也可以直接在类中给出函数以限定。也可以直接在类中给出函数体,形成内联成员函数。体,形成内联成员函数。l允许声明重载函数和带缺省形参值的允许声明重载函数和带缺省形参值的函数函数28内联成员函数内联成员函数l为了提高运行时的效率,对于较简单为了提高运行时的效率,对于较简单的函数可以声明为内联形式。的函数可以声明为内联形式。l内联函数体中不要有复杂结构(如循内联函数体中不要有复杂结构(如循环语句和环语句和switch语句)。语句)。l在类中声明内联成员函数的方式:在类中声明内联
15、成员函数的方式: 将函数体放在类的声明中。 使用inline关键字。类 和 对 象29内联成员函数举例内联成员函数举例(一一)class Point public: inline void init(int initX,int initY) x=initX; y=initY; inline int getX( ) return x; inline int getY( ) return y; private: int x,y;类 和 对 象30内联成员函数举例内联成员函数举例(二二)class Point public: inline void init(int initX,int initY)
16、; inline int getX( );); inline int getY( );); private: int x,y;类 和 对 象inline void Point: Init(int initX,int initY) X=initX; Y=initY;inline int Point:getX( ) return X;inline int Point:getY( ) return Y;32对象对象l类的对象是该类的某一特定实体,即类的对象是该类的某一特定实体,即类类型的变量。类类型的变量。l声明形式:声明形式: 类名类名 对象名;对象名;l例:例: Clock myClock;类
17、和 对 象33类中成员的访问方式类中成员的访问方式l类中成员互访类中成员互访 直接使用成员名l类外访问类外访问 使用“对象名.成员名”方式访问 public 属性的成员类 和 对 象34例例4-1 类的应用举例类的应用举例#includeclass Clock ./类的声明略类的声明略/.类的实现略类的实现略void main(void) Clock myClock; myClock.setTime(8,30,30); myClock.showTime( );类 和 对 象35构造函数构造函数l构造函数的作用是在对象被创建时使构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象用特
18、定的值构造对象,或者说将对象初始化初始化为一个特定的状态。为一个特定的状态。l在对象创建时在对象创建时由系统自动调用由系统自动调用。l如果程序中未声明,则系统自动产生如果程序中未声明,则系统自动产生出一个出一个缺省形式缺省形式的构造函数的构造函数l允许为允许为内联内联函数、函数、重载重载函数、函数、带缺省带缺省形参值形参值的函数的函数构造函数和析构函数36构造函数举例构造函数举例class Clockpublic:Clock (int NewH, int NewM, int NewS);/构造函数构造函数void setTime(int NewH, int NewM, int NewS);vo
19、id showTime( );private:int Hour,Minute,Second;构造函数和析构函数构造函数的实现:构造函数的实现:Clock:Clock(int NewH, int NewM, int NewS)Hour=H;Minute=M;Second=S;建立对象时构造函数的作用:建立对象时构造函数的作用:void main( ) Clock c (0,0,0); /隐含调用构造函数,将初始值作为实参。隐含调用构造函数,将初始值作为实参。 c.showTime( );38拷贝构造函数拷贝构造函数拷贝构造函数是一种特殊的构造函数,其形参为拷贝构造函数是一种特殊的构造函数,其形参
20、为本类的对象引用。本类的对象引用。class 类名 public : 类名(形参);/构造函数 类名(类名 &对象名);/拷贝构造函数 .;类名: 类名(类名 &对象名)/拷贝构造函数的实现 函数体 构造函数和析构函数39例例4-2 拷贝构造函数举例拷贝构造函数举例class Point public: Point(int xx=0,int yy=0)x=xx; y=yy; Point(const Point& p); int getX( ) return x; int getY( ) return y; private: int x,y;构造函数和析构函数Point:Point (const
21、 Point& p) x=p.x; y=p.y; cout拷贝构造函数被调用拷贝构造函数被调用endl;41例例4-2 拷贝构造函数举例拷贝构造函数举例l当用类的一个对象去初始化该类的另一当用类的一个对象去初始化该类的另一个对象时系统自动调用它实现拷贝赋值。个对象时系统自动调用它实现拷贝赋值。void main(void) Point A(1,2); Point B(A); /拷贝构造函数被调用拷贝构造函数被调用 coutB.getX( )endl;构造函数和析构函数42拷贝构造函数举例拷贝构造函数举例(例例4-2) l若函数的形参为类对象,调用函数时,若函数的形参为类对象,调用函数时,实参赋
22、值给形参,系统自动调用拷贝实参赋值给形参,系统自动调用拷贝构造函数。例如:构造函数。例如:void fun1(Point p) coutp.getX( )endl; void main( ) Point A(1,2); fun1(A); /调用拷贝构造函数调用拷贝构造函数 构造函数和析构函数43拷贝构造函数举例拷贝构造函数举例(例例4-2)l当函数的返回值是类对象时,系统自动调当函数的返回值是类对象时,系统自动调用拷贝构造函数。例如:用拷贝构造函数。例如:Point fun2( ) Point A(1,2); return A; /调用拷贝构造函数调用拷贝构造函数void main( ) Po
23、int B; B=fun2( ); 构造函数和析构函数44拷贝构造函数拷贝构造函数如果程序员没有为类声明拷贝初始如果程序员没有为类声明拷贝初始化构造函数,则编译器自己生成一个拷化构造函数,则编译器自己生成一个拷贝构造函数。贝构造函数。这个构造函数执行的功能是:用作这个构造函数执行的功能是:用作为初始值的对象的每个数据成员的值,为初始值的对象的每个数据成员的值,初始化将要建立的对象的对应数据成员。初始化将要建立的对象的对应数据成员。构造函数和析构函数45析构函数析构函数l完成对象被删除前的一些清理工作。完成对象被删除前的一些清理工作。l在对象的生存期结束的时刻系统自动在对象的生存期结束的时刻系统
24、自动调用它,然后再释放此对象所属的空调用它,然后再释放此对象所属的空间。间。l如果程序中未声明析构函数,编译器如果程序中未声明析构函数,编译器将自动产生一个缺省的析构函数。将自动产生一个缺省的析构函数。构造函数和析构函数46构造函数和析构函数举例构造函数和析构函数举例#includeclass Point public: Point(int xx,int yy); Point( ); /.其它函数原形其它函数原形 private: int x,int y;构造函数和析构函数Point:Point(int xx,int yy) x=xx; y=yy;Point:Point( )/.其它函数的实现
25、略其它函数的实现略48例例4-3 类的应用举例类的应用举例键盘输入多个点数据,并计算这些点键盘输入多个点数据,并计算这些点顺次连成的折线的总长度。顺次连成的折线的总长度。double calculateDistance( Point & p1, Point & p2)return sqrt(p1.getX()*p2.getX()+p1.getY()*p2.getY();50组合的概念组合的概念l组合:类中的成员变量是另一个类的组合:类中的成员变量是另一个类的对象。对象。类 的 组 合51举例举例类 的 组 合class Line private: Point p1,p2; /线段的两个端点线段
26、的两个端点 public: Line(Point a,Point b); /构造函数构造函数 Void Draw(void); /画出线段画出线段;/.函数的实现略函数的实现略52类组合的构造函数设计类组合的构造函数设计l原则:不仅要负责对本类中的基本类型成原则:不仅要负责对本类中的基本类型成员变量赋初值,也要对对象成员初始化。员变量赋初值,也要对对象成员初始化。l声明形式:声明形式:类名:类名(对象成员所需的形参,本类成员形参) :对象1(参数),对象2(参数),. 本类初始化 类 的 组 合53类组合的构造函数调用类组合的构造函数调用l构造函数调用顺序:先调用内嵌对象构造函数调用顺序:先调
27、用内嵌对象的构造函数(按内嵌时的声明顺序,的构造函数(按内嵌时的声明顺序,先声明者先构造)。然后调用本类的先声明者先构造)。然后调用本类的构造函数。(析构函数的调用顺序相构造函数。(析构函数的调用顺序相反)反)l若调用缺省构造函数(即无形参的),若调用缺省构造函数(即无形参的),则内嵌对象的初始化也将调用相应的则内嵌对象的初始化也将调用相应的缺省构造函数。缺省构造函数。类 的 组 合54类的组合举例(二)类的组合举例(二)class Part /部件类部件类 public: Part( ); Part(int i); Part( ); void Print( ); private: int v
28、al;类 的 组 合class Whole public: Whole( ); Whole(int i,int j,int k); Whole( ); void Print( ); private: Part one; Part two; int date;Whole:Whole( )/调用调用Part的默认构造函数的默认构造函数 date=0;Whole:Whole(int i,int j,int k): two(i),one(j),date(k) /调用调用Part的带参数构造函数的带参数构造函数/.其它函数的实现略其它函数的实现略57前向引用声明前向引用声明l类应该先声明,后使用类应该先
29、声明,后使用;l 如果需要在某个类的声明之前,引用如果需要在某个类的声明之前,引用该类,则应进行该类,则应进行前向引用声明前向引用声明。l前向引用声明只为程序引入一个标识前向引用声明只为程序引入一个标识符,但具体声明在其它地方。符,但具体声明在其它地方。58前向引用声明举例前向引用声明举例class B; /前向引用声明前向引用声明class A public: void f(B b);class B public: void g(A a);59声明及用途声明及用途template 类声明类声明使用类模板使用户可以为类声明一使用类模板使用户可以为类声明一种模式,使得类中的某些数据成员、种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数某些成员函数的参数、某些成员函数的返回值,能取任意类型(包括系统的返回值,能取任意类型(包括系统预定义的和用户自定义的)。预定义的和用户自定义的)。类 模 板60例例4-4 类模板应用举例类模板应用举例类 模 板键盘输入多个点数据,并计算这些点顺次连成的折线的总长度。(与例4-3功能一样,但是点的数据类型要采用flo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度绿色建筑项目HSE管理体系优化合同3篇
- 2024版有机化肥技术服务合同
- 2024版美容师合同
- 幼儿园外教2025年度聘用合同2篇
- 全球电子商务人才培养2025年度国际协调项目合同
- 年度地震电磁辐射观测仪产业分析报告
- 2024版社工项目合同范本
- 二零二五年度智能楼宇电梯全面维保及保养服务合同2篇
- 二零二四年专科医院聘任康复治疗师服务合同3篇
- 重庆市二零二五年度房屋买卖中介服务合同2篇
- 《请柬及邀请函》课件
- 中小银行上云趋势研究分析报告
- 机电安装工程安全培训
- 辽宁省普通高中2024-2025学年高一上学期12月联合考试语文试题(含答案)
- 青海原子城的课程设计
- 常州大学《新媒体文案创作与传播》2023-2024学年第一学期期末试卷
- 麻醉苏醒期躁动患者护理
- 英语雅思8000词汇表
- 小学好词好句好段摘抄(8篇)
- JT-T-1059.1-2016交通一卡通移动支付技术规范第1部分:总则
- 《茶艺文化初探》(教学设计)-六年级劳动北师大版
评论
0/150
提交评论