[工学]第四章 类与对象

上传人:豆浆 文档编号:53580006 上传时间:2018-09-03 格式:PPT 页数:96 大小:314KB
返回 下载 相关 举报
[工学]第四章 类与对象_第1页
第1页 / 共96页
[工学]第四章 类与对象_第2页
第2页 / 共96页
[工学]第四章 类与对象_第3页
第3页 / 共96页
[工学]第四章 类与对象_第4页
第4页 / 共96页
[工学]第四章 类与对象_第5页
第5页 / 共96页
点击查看更多>>
资源描述

《[工学]第四章 类与对象》由会员分享,可在线阅读,更多相关《[工学]第四章 类与对象(96页珍藏版)》请在金锄头文库上搜索。

1、1,第四章 类与对象,C+语言程序设计,2,本章内容,面向对象程序设计的基本特点 类和对象 构造函数和析构函数 类的组合 UML图形标识 结构体和联合体 程序实例,3,本章内容,面向对象程序设计的基本特点 类和对象 构造函数和析构函数 类的组合 UML图形标识 结构体和联合体 程序实例,4,回顾:面向过程的设计方法,重点: 如何实现细节过程,将数据与函数分开。 形式: 主模块+若干个子模块(main( )+子函数)。 特点: 自顶向下,逐步求精功能分解。 缺点: 效率低,程序的可重用性差。,面向对象的思想,5,面向对象的方法,目的: 实现软件设计的产业化。 观点: 自然界是由实体(对象)所组成

2、的。OO方法是采用对自然界的模仿描述并处理现实问题的方法。 OO程序设计特点: 抽象、封装、继承和多态 要求: 高度概括、分类、和抽象。,面向对象的思想,6,面向对象程序设计的基本特点 抽象,抽象是对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述的过程。 先注意问题的本质及描述,其次是实现过程或细节。 数据抽象:描述某类对象的属性或状态(对象相互区别的物理量)。 代码抽象:描述某类对象的共有的行为特征或具有的功能。 抽象的实现:通过类的声明。,OOP的基本特点,7,抽象实例钟表,数据抽象: int Hour, int Minute, int Second 功能抽象: SetTim

3、e( ), ShowTime( ),OOP的基本特点,8,抽象实例钟表类,class Clock public: void SetTime(int NewH, int NewM, int NewS); void ShowTime( );private: int Hour,Minute,Second; ;,OOP的基本特点,9,抽象实例人,数据抽象: char *name,char *sex, int age, int id 代码抽象: 生物属性角度: GetCloth( ), Eat( ), Step( ), 社会属性角度: Work( ), Promote( ) ,OOP的基本特点,10,面

4、向对象程序设计的基本特点 封装,将抽象出的数据成员、代码成员相结合,将它们视为一个整体,即形成“类”。 目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。 实现封装:类声明中的,OOP的基本特点,11,封装实例钟表类,实例: class Clock public: void SetTime(int NewH,int NewM, int NewS); void ShowTime( );private: int Hour,Minute,Second; ;,特定的访问权限,OOP的基本特点,12,面向对象程序设计的基本特点 继承与派生,

5、是C+中支持层次分类的一种机制,允许程序员在保持原有类特性的基础上,进行更具体的说明。 实现:声明派生类第七章,OOP的基本特点,13,面向对象程序设计的基本特点 多态性,多态:一段代码能够处理多种类型对象的能力。 目的:达到行为标识统一,减少程序中标识符的个数。 多态性实现机制: 强制多态:数据类型的显式或隐式转换 重载多态:函数和操作符重载第八章 类型参数化多态:函数模板和类模板第九章 包含多态:虚函数第八章,OOP的基本特点,14,本章内容,面向对象程序设计的基本特点 类和对象 构造函数和析构函数 类的组合 UML图形标识 结构体和联合体 程序实例,15,类和对象 c+中的类,类是具有相

6、同属性和行为的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和行为两个主要部分。 利用类可以实现数据的封装、隐藏、继承与派生。 利用类易于编写大型复杂程序,其模块化程度比C中采用函数更高。,类 和 对 象,16,对象/类(Object&Class),对象是由数据(数据成员、成员变量、实例变量、对象的局部变量等)及能对其实施的操作(成员函数、方法或消息处理过程等)所构成的封装体,它属于值的范畴。 类(对象的类型)描述了对象的特征(数据和操作),它属于类型的范畴 。 类是对逻辑上相关的函数和数据的封装,是对问题的抽象描述。,类 和 对 象,17,类的定义,时钟类定义:

7、class Clock public: void SetTime(int NewH, int NewM, int NewS); void ShowTime();private: int Hour,Minute,Second; ;C+的类是一种用户自定义类型,定义形式如下: class 类名称 public:公有成员(外部接口)private:私有成员protected:保护型成员 ;,类 和 对 象,18,类成员的访问控制,在C+的类定义中,可以用访问控制修饰符public,private或protected来描述对类成员的访问限制。 例如: class A public: /访问不受限制。

8、int x;void f();private: /只能在本类和友元中访问。 int y;void g();protected: /只能在本类、派生类和友元中访问。 int z;void h(); ;,类 和 对 象,19,在类定义中,可以有多个public、private和protected访问控制说明,C+的默认访问控制是private,例如: class A int m,n; /m,n的访问控制说明为private。public:int x;void f();private:int y;void g();protected:int z;void h();public:void f1();

9、;,类成员的访问控制,类 和 对 象,20,类的数据成员和在类的内部使用的成员函数应该指定为private,只有提供给外界使用的成员函数才指定为public。 public访问控制的成员构成了类与外界的一种接口(interface)。操作一个对象时,只能通过访问对象类中的public成员来实现。 protected类成员访问控制具有特殊的作用(继承)。其差别表现在继承与派生时对派生类的影响不同,第七章讲。,类成员的访问控制,类 和 对 象,21,数据成员,类定义中的数据成员描述了类的对象所包含的数据的类型,数据成员的说明格式与非成员数据的声明格式相同,例如: class Date /类定义 p

10、rivate: /访问控制说明int year,month,day; /数据成员说明 ; 说明数据成员时不允许进行初始化(某些静态数据成员除外)。例如: class A int x=0; /Errorconst double y=0.0; /Error;,数据成员的类型可以是任意的C+类型(void除外)。在说明一个数据成员的类型时,如果未见到相应的类型定义或相应的类型未定义完,则该数据成员的类型只能是这些类型的指针或引用类型(静态成员除外)。例如: class A; /A是在程序其它地方定义的类,这里是声明。 class B A a; /Error,未见A的定义。B b; /Error,B还

11、未定义完。A *p; /OKB *q; /OKA ,类 和 对 象,数据成员,23,对象,类的对象是该类的某一特定实体,即类类型的变量。 声明形式: 类名 对象名; 例: Clock myClock;,类 和 对 象,24,类中成员的访问方式,类中成员互访 直接使用成员名 类外访问 使用“对象名.成员名”方式访问 public 属性的成员,类 和 对 象,25,通过对象来访问类的成员时要受到类成员访问控制的限制,例如: class A public:void f() /允许访问:x,y,f,g,h private:int x;void g() /允许访问:x,y,f,g,h protected

12、:int y;void h() /允许访问:x,y,f,g,h ;, A a; a.f(); /OK a.x = 1; /Error a.g(); /Error a.y = 1; /Error a.h(); /Error,26,类的成员函数,成员函数描述了对类定义中的数据成员所能实施的操作。 成员函数的实现: 成员函数一般是将函数的原型写在类体中,实现是写在类定义之外的。 成员函数的定义也可以放在类定义中,此时形成内联成员函数。例如: class A .void f() . /建议编译器按内联函数处理。 ; 等价于: 类外定义: Inline A:void f() .,类 和 对 象,27,例

13、:时钟类的定义,class Clock public: void SetTime(int NewH, int 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“:”Secondendl; ,注意: 一般将类的实现放在类外定义。此时,类的成员函数名

14、需要限制,例如 Clock:ShowTime,28,类的成员函数,成员函数调用中的目的对象:调用成员函数需要使用“.”操作符指出调用所针对的对象,这一对象在本次调用中称为目的对象。 类中成员互访 直接使用成员名 类外访问 使用“对象名.成员名”方式访问 public 属性的成员,类 和 对 象,29,类成员函数名是可以重载的(析构函数除外),它遵循一般函数名的重载规则。例如: class A public:void f();int f(int i);double f(double d); 也允许声明带缺省形参值的成员函数,类 和 对 象,成员函数,30,内联成员函数,内联成员函数与一般的内联函

15、数一样,函数体中不允许有复杂结构(如循环语句和switch语句)。 内联成员函数的定义方式: 将函数体放在类的声明中。 在类外使用inline关键字定义的成员函数。,类 和 对 象,31,程序实例,#include using namespace std; class Clock public: void SetTime (int NewH=0, int NewM=0,int NewS=0);void ShowTime();private: int Hour, Minute, Second; ;,类 和 对 象,32,void Clock : SetTime(int NewH, int New

16、M,int NewS) Hour=NewH;Minute=NewM;Second=NewS; void Clock : ShowTime() coutHour“:“Minute“:“Secondendl; ,程序实例,类 和 对 象,33,int main() Clock myClock;cout“First time set and output:“endl;myClock.SetTime();myClock.ShowTime();cout“Second time set and output:“endl;myClock.SetTime(8,30,30);myClock.ShowTime();return 0; ,

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

最新文档


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

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