04--类与对象

本章主要讲解面向对象的思想、 OOP的基本特点、类和对象、 构造函数和析构函数、类的组合、结构体和联合体以及回顾面向过程的设计方法中的重点、形式、特点、缺点
展开查看详情

1.C++语言程序设计 第四章 类与对象 信息工程学院 王红平 Email:cugwhp@qq.com

2.C++语言程序设计 本章主要内容  面向对象的思想  OOP的基本特点  类和对象  构造函数和析构函数  类的组合  结构体和联合体 2

3.C++语言程序设计 回顾:面向过程的设计方法 面 向  重点: 对 – 如何实现细节过程,将数据与函数分开。 象  形式: 的 – 主模块+若干个子模块(main()+子函数)。 思  特点: 想 – 自顶向下,逐步求精——功能分解。  缺点: – 效率低,程序的可重用性差。 3

4.C++语言程序设计 面向对象的方法 面 向  目的: 对 – 实现软件设计的产业化。 象  观点: 的 – 自然界是由实体(对象)所组成。 思  程序设计方法: 想 – 使用面向对象的观点来描述模仿并处理 现实问题。  要求: – 高度概括、分类、和抽象。 4

5.C++语言程序设计 面向对象的基本概念 面 ——对象 向 对  一般意义上的对象: 象 – 是现实世界中一个实际存在的事物。 的 – 可以是有形的(比如一辆汽车),也可 方 以是无形的(比如一项计划)。 法 – 是构成世界的一个独立单位,具有:  静态特征:可以用某种数据来描述  动态特征:对象所表现的行为或具有的功能 5

6.C++语言程序设计 面向对象的基本概念 面 ——对象 向 对  面向对象方法中的对象: 象 – 是系统中用来描述客观事物的一个实体, 的 它是用来构成系统的一个基本单位。对象 方 由一组属性和一组行为构成。 法 – 属性:用来描述对象静态特征的数据项。 – 行为:用来描述对象动态特征的操作序列。 6

7.C++语言程序设计 面向过程举例 a b c double GetPerimeter(double a,double b,double c); double GetArea(double a,double b,double c); double GetAngle(double a,double b,double c,int which); …… 7

8.C++语言程序设计 面向对象举例 a b c double a;double b;double c; double GetPerimeter(); A double GetArea(); double GetAngle(int which); …… 8

9.C++语言程序设计 面 4.1面向对象程序设计的基本特点 向 对  抽象 象  封装 的  继承 方  多态 法 9

10.C++语言程序设计 4.1.1抽象 抽象是对具体对象(问题)进行概括, OOP 抽出这一类对象的公共性质并加以描述 的 的过程。 基 – 先注意问题的本质及描述,其次是实现过 程或细节。 本 – 数据抽象:描述某类对象的属性或状态 特 (对象相互区别的物理量)。 点 – 代码抽象:描述某类对象的共有的行为特 征或具有的功能。 – 抽象的实现:通过类的声明。 10

11.C++语言程序设计 面向对象举例 a b c double a;double b;double c; double GetPerimeter(); A double GetArea(); double GetAngle(int which); …… 11

12.C++语言程序设计 抽象实例——钟表 OOP  数据抽象: int Hour, int Minute, int Second 的 基  代码抽象: 本 SetTime(), ShowTime() 特 点 12

13.C++语言程序设计 抽象实例——钟表类 OOP class Clock { 的 public: 基 void SetTime(int NewH, int NewM, 本 int NewS); void ShowTime(); 特 private: 点 int Hour,Minute,Second; }; 13

14.C++语言程序设计 抽象实例——人 OOP 数据抽象: 的 char name[20],char gender,int age,int id 基 代码抽象: 本 生物属性角度: 特 GetCloth(), Eat(), Step(),… 点 社会属性角度: Work(), Promote() ,… 14

15.C++语言程序设计 4.1.2封装 OOP 将抽象出的数据成员、代码成员相结 的 合,将它们视为一个整体。 基 – 目的是增强安全性和简化编程,使用者 本 不必了解具体的实现细节,而只需要通 特 过外部接口,以特定的访问权限,来使 点 用类的成员。 15

16.C++语言程序设计 面向对象举例 a b c double a;double b;double c; double GetPerimeter(); A double GetArea(); double GetAngle(int which); …… 16

17.C++语言程序设计 4.1.2封装 OOP  实例: class Clock 的 { 外部接口 基 public: void SetTime(int NewH,int NewM, 本 int NewS); 特 void ShowTime(); 点 private: int Hour,Minute,Second; }; 特定的访问权限 边界 17

18.C++语言程序设计 4.1.3继承 OOP 是C++中支持层次分类的一种机制, 的 允许程序员在保持原有类特性的基础上, 基 本 进行更具体的说明。 特 点 实现:声明派生类——第七章 18

19.C++语言程序设计 4.1.4多态性 OOP  多态:同一名称,不同的功能实现方式。 的 基  目的:达到行为标识统一,减少程序中标 本 识符的个数。 特 点  实现:重载函数和虚函数——第八章 19

20.C++语言程序设计 c++中的类 类 和  类是具有相同属性和行为的一组对象 的集合,它为属于该类的全部对象提 对 供了统一的抽象描述,其内部包括属 象 性和行为两个主要部分。  利用类可以实现数据的封装、隐藏、 继承与派生。  利用类易于编写大型复杂程序,其模 块化程度比C中采用函数更高。 20

21.C++语言程序设计 类的定义形式 类 类是一种用户自定义类型,声明形式: 和 class 类名称 对 { public: 象 公有成员(外部接口) private: 私有成员 protected: 保护型成员 }; 21

22.C++语言程序设计 公有类型成员 类 和 在关键字public后面声明,它们是类 对 与外部的接口,任何外部函数都可以访 象 问公有类型数据和函数。 22

23.C++语言程序设计 私有类型成员 类 在关键字private后面声明,只允许 和 本类中的函数访问,而类外部的任何函 对 数都不能访问。 象 如果紧跟在类名称的后面声明私有成员, 则关键字private可以省略。 23

24.C++语言程序设计 保护类型 类 和 与private类似,其差别表现在继承与 对 象 派生时对派生类的影响不同,第七章讲。 24

25.C++语言程序设计 类的成员 类 class Clock 和 { 成员函数 对 public: void SetTime(int NewH, int NewM, 象 int NewS); void ShowTime(); private: int Hour, Minute, Second; }; 成员数据 25

26.void Clock :: SetTime(int NewH, int NewM, int NewS) { Hour=NewH; Minute=NewM; Second=NewS; } void Clock :: ShowTime() { cout<<Hour<<":"<<Minute<<":"<<Second; } 19

27.C++语言程序设计 成员数据 类  与一般的变量声明相同,但需要将它 和 放在类的声明体中。 对 象 27

28.C++语言程序设计 成员函数 类  在类中说明原形,可以在类外给出函数 和 体实现,并在函数名前使用类名加以限 对 定。也可以直接在类中给出函数体,形 象 成内联成员函数。  允许声明重载函数和带默认形参值的函 数 28

29.C++语言程序设计 内联成员函数 类  为了提高运行时的效率,对于较简单 和 的函数可以声明为内联形式。 对  内联函数体中不要有复杂结构(如循 象 环语句和switch语句)。  在类中声明内联成员函数的方式: – 将函数体放在类的声明中。 – 使用inline关键字。 29