面向对象程序设计语言第二章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
26
class Rectangle { private:
float width; public:
void setData(float, float); void calcArea(void); float getWidth(void); float getLength(void); float getArea(void); private: float length: float area; };
28
3.3 定义成员函数
类的成员函数的定义与普通函数的定义类 似.
成员函数在类之外定义的常规方式:
<返回值类型> <类名>::<函数名> ( 参数列表 )
{ }
29
class Rectangle { private:
float width; float length: float area; public: void setData(float, float); void calcArea(void); float getWidth(void); float getLength(void); float getArea(void); };
float width; float length; float area; public: void setData(float, float); void calcArea(void); float getWidth(void); float getLength(void); float getArea(void); };
类的实例化 类的多文件组织 内联成员函数 构造函数
5
O(O攻P城特)点:打个比方
面向过程:
就好比为了攻下一座城池,一个目标约束着 下一个目标。粮草-》兵力-》弹药、器械, 可能调配(函数间调用)。任何一个环节出了 问题都会影响这个“链条”。
面向对象:
为攻克一座城池,所有攻城资源一字排开, 每一个资源(例如大炮,士兵)全部武装到位, 荷枪实弹(封装好的一个个类),只管拿来使 用,直到达到你的最终目的。
34
//***************************************** // 计算面积 //***************************************** void Rectangle::calcArea(void) {
area = width * length; }
36
void main(void) { Rectangle box;
float wide, boxLong;
cout << “ 请输入长和宽 ? "; cin >> wide>> boxLong; box.setData(wide, boxLong); box.calcArea( ); cout << “长方形的参数是:\n"; cout << “宽: "<< box.getWidth( ) << endl; cout << “长: "<< box.getLength()<<endl; cout << “面积: "<< box.getArea( )<<endl; }
25
class Rectangle { public:
void setData(float, float); void calcArea(void); float getWidth(void); float getLength(void); float getArea(void); private: float width; float length: float area; };
– 自顶向下,逐步求精——功能分解。
缺点:
– 效率低,程序的可重用性差。
3
面向对象的方法
目的:
– 实现软件设计的产业化。
观点:
– 自然界是由实体(对象)所组成。
程序设计方法:
– 使用面向对象的观点来描述模仿并处理 现实问题。
要求:
– 高度概括、分类、和抽象。
4
本章主要内容
面向对象的思想 OOP的基本特点 类的基本概念 定义成员函数
33
//*************************************** //参数值传递给私有成员变量 //***************************************
void Rectangle::setData(float w, float l) {
width = w; length = l; }
//***************************************** // 返回私有成员变量width //***************************************** float Rectangle::getWidth(void) {
return width; }
Work(), Promote() ,…
10
OOP
封装
将抽象出的数据成员、代码成员相结合,
的 将它们视为一个整体。( 例如调色板,通过 基 函数操纵红绿蓝)

– 目的是增强安全性和简化编程,使用者不必了
特 点
解具体的实现细节,而只需要通过外部接口, 以特定的访问权限,来使用类的成员。 – 实现封装:类声明中的{}
Example:
17
类的声明形式
类是一种用户自定义类型,声明形式:
class 类名称 {
public: 公有成员(外部接口)
private: 私有成员
protected: 保护型成员
}
18
公有类型成员
在关键字public后面声明,它们是类 与外部的接口,任何外部函数都可以访 问公有类型数据和函数。
//****************************************** // 返回私有成员变量 area //****************************************** float Rectangle::getArea(void) {
return area; }
37
3.5 为何要有私有成员?
对象需要保护其重要的数据,令其私有,对 外提供公有的接口。
6
抽象
OOP
抽象是对具体对象(问题)进行概括,
抽出这一类对象的公共性质并加以描述
的 基
的过程。
– 先注意问题的本质及描述,其次是实现过 程或细节。

– 数据抽象(属性):描述某类对象的属性

或状态(对象相互区别的物理量)。

– 代码抽象(行为):描述某类对象的共有的
行为特征或具有的功能。
– 抽象的实现:通过类的声明。
7
OOP
抽象实例——钟表
数据抽象:

int Hour, int Minute, int Second
基 代码抽象:

SetTime(), ShowTime()


8
抽象实例——钟表类
OOP
class C基
void SetTime(int NewH, int NewM,
box.setData(10.0, 12.5); cout << Box.getWidth( ); Rectangle *boxPtr; boxPtr = &box; boxPtr->setData(15, 12);
32
#include <iostream.h> // Program 3-1 class Rectangle { private:
11
封装
OOP
实例:
class Clock
的{
外部接口

public: void SetTime(int NewH,int NewM,

int NewS);

void ShowTime();

private: int Hour,Minute,Second;
};
特定的访问权限
边界
12
OOP
继承与派生
35
//****************************************** // 返回私有成员变量 length //****************************************** float Rectangle::getLength(void) {
return length; }
30
void Rectangle::setData(float w, float l ) {
width = w; length = l; }
float Rectangle::getWidth( void ) {
return width; }
31
3.4 类的实例化
定义对象成为类的实例化 (模具-铸 件) Example: Rectangle box;
是C++中支持层次分类的一种机制,
的 基 允许程序员在保持原有类特性的基础上, 本 进行更具体的说明。 特 点
13
OOP
多态性
多态:同一名称,不同的功能实现方式。
的 基 目的:达到行为标识统一,减少程序中标 本 识符的个数。 特 点 重载函数和虚函数
14
本章主要内容
面向对象的思想 OOP的基本特点 类的基本概念 定义成员函数
属性
成员函数
setData( ) { ……}
calcArea( ) { ……} getWidth( ) { ……}
方法
getLength( ){ ……}
getArea( ) { ……}
22
class Rectangle { float width; float length: float area;

int NewS);

void ShowTime();

private: int Hour,Minute,Second;
};
9
OOP
抽象实例——人
数据抽象:
的 char *name,char *sex,int age,int id
基 代码抽象:
本 生物属性角度:
特 点
GetCloth(), Eat(), Step(),… 社会属性角度:
27
请使用统一的习惯(惯例).
class class-name { private:
declaration; // ... more declarations may follow... public: declaration; // ... more declarations may follow... };
19
私有类型成员
在关键字private后面声明,只允许 本类中的函数访问,而类外部的任何函 数都不能访问。
如果紧跟在类名称的后面声明私有成员, 则关键字private可以省略。
20
保护类型
与private类似,其差别表现在继承与 派生时对派生类的影响不同,见第五章。
21
成员变量 float width; float length; float area;
第二章 类的基础部分
1
本章主要内容
面向对象的思想 OOP的基本特点 类的基本概念 定义成员函数
类的实例化 类的多文件组织 内联成员函数 构造函数
2
回顾:面向过程的设计方法
重点:
– 如何实现细节过程,将数据与函数分开。
形式:
– 主模块+若干个子模块(main()+子函数)。
特点:
23
3.2 类的基本概念(续)
为了使类的成员能够在类外面被 访问,其成员必须定义为public.
Example:
24
class Rectangle { private:
float width; float length: float area; public: void setData(float, float); void calcArea(void); float getWidth(void); float getLength(void); float getArea(void); };
类的实例化 类的多文件组织 内联成员函数 构造函数
15
过程化设计的缺陷何在?
出现大量的全局变量。 程序复杂: 程序员难以理解成百上千
的函数 程序难以进行修改和扩充
16
什么是面向对象程序设计?
OOP 以对象为中心, 把数据和对 数据的操作封装在一起。
过程化设计是以过程为中心 (函数). 面向对象设计是以对象为中心.
默认情况下类的成员是私有
的,而结构体(struct)中的成 员是公有的。
void setData(float, float); void calcArea(void); float getWidth(void); float getLength(void); float getArea(void); };
相关文档
最新文档