- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
04--类与对象
展开查看详情
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