C面向对象程序设计解析.docx

上传人:b****7 文档编号:26220573 上传时间:2023-06-17 格式:DOCX 页数:24 大小:477.54KB
下载 相关 举报
C面向对象程序设计解析.docx_第1页
第1页 / 共24页
C面向对象程序设计解析.docx_第2页
第2页 / 共24页
C面向对象程序设计解析.docx_第3页
第3页 / 共24页
C面向对象程序设计解析.docx_第4页
第4页 / 共24页
C面向对象程序设计解析.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

C面向对象程序设计解析.docx

《C面向对象程序设计解析.docx》由会员分享,可在线阅读,更多相关《C面向对象程序设计解析.docx(24页珍藏版)》请在冰豆网上搜索。

C面向对象程序设计解析.docx

C面向对象程序设计解析

程序设计语言

程序设计语言是为了表达程序而由人设计出来的计算机能够接受的人工语言,它是用来表达用户意图、指挥计算机工作的通信工具。

目前,程序设计语言的发展已经经历了四代,第五代语言尚处于萌芽状态•

第一代语言:

机器语言/二进制语言特点:

计算机所特有的,不同计算机有不同的机器语言。

[例如]:

x+1—X:

001111100000100100111111B或3E093FH优点:

计算机可以直接识别和执行,效率较高。

缺点:

人工编写机器语言程序很繁琐,容易出错,而且通用性很差.

第二代语言:

汇编语言/符号语言

特点:

用含义较鲜明的符号代替机器语言中的二进制编码。

[例如]:

MOX'AX,X/INCAX/MOVX,AX

优点:

比较直观,不易出错。

缺点:

不能被计算机硬件直接识别和执行,仍然依赖于计算机,通用性较差。

f■■

第三代语言:

算法语言/高级语言

特点:

基本组成成分是各种语句。

优点:

比用机器语言或汇编语言编写程序更加方便、简单和直观;不依赖于机器,通用性很强。

缺点:

不能被计算机硬件直接识别和执行•

[例如]:

BASIC,FORTRON,CC:

或x卄或卄x

第四代语言:

实质上是可以快速开发应用软件的各种高生产率的软件工具的统称•

[例如C++,Delphi等。

第五代语言:

多数人认为,第五代语言将是智能化的语言。

PROLOG语言可能是第五代语言最著名的雏形。

第3*而匀对象鴉序讼计

程序设计方法

•随着计算机软、硬件技术的不断发展,出现了许许多多的程序设计语言,程序设计方法也得到不断发展,经历一个由低级到高级,由复杂到简单的过程。

主要有两种:

1.面向过程的结构化程序设计

SP(StructuredProgiamming)

2.面向对象的程序设计

OOP(ObjectOrientedProgi^imming)

巾第3*而劎对

面向过程的结构化程序设计

•使用传统程序设计语言进行程序设计时,必须详细准确地描述解题过程.因为程序设计工作主要围绕设计解题过程进行,所以传统的程序设计方法称为面向过程的程序设计。

•面向过程开发模式

初始化—读入一二计算T写出一结束

过程性系统

厲第3*而匀对象41序讼计

面向过程的结构化程序设计

•设计思路

-自顶向下、逐步求精。

-采用模块分解与功能抽象,分而治之。

•程序结构:

-按功能划分为若干个基本模块,形成一个树状结构.

-各模块间的关系尽可能简单,功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成。

-模块化实现的具体方法是使用子程序(函数)。

面向过程的结构化程序设计

 

传统的结构化程序设计

 

 

A

 

传统的结构化程序设计

例如:

要求读入一组整数,统计其中正整数和负整数的个数。

该任务的模块结构及细化过程如下:

4•读入数据

面向过程的结构化程序设计

•目的:

用于数学计算•主要工作:

设计求解问题的过程•优点:

-复杂任务简单化

-使用方便

•缺点:

数据与过程相互独立,程序因数据格式或处理过程不同要分别编写程序,代码重用性差;

-可能导致数据与所需处理过程不匹配现象;

封装性和隐蔽性差;

3.1面向对象程序设计

•栏面向对象程序设计是被结构化的结构化程序设计。

它是软件开发的第二次变革,是程序结构的统一理论”.

•基本思想:

面向对象程序设计的出发点和追求的基本目标,是使人们认识系统的方法与设计、实现系统的方法尽可能接近,也就是使描述问题的问题空间和解决问题的方法空间在结构上尽可能一致。

•面向对象程序设计是将数据和操作数据的方法封装在一起,形成一个相互依存、不可分割的整体。

面向对象程序设计

•将对象作为构成软件系统的基本单元,并从相同类型的对象中抽象出一种新型的数据结构・…-类.

类是一种区别于其它各种一般数据类型的特殊类型。

-对象是类的实例。

A对象是面向对象开发模式的基本成份。

》每个对象可用它本身的一组厲性和它可以执行的一组操作来定义.

»属性一般只能通过执行对象的操作来改变.

k操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用.

》对象将其属性和行为封装在一起,并将其内部大部分的实现细节隐藏起来,仅通过一个可控的接口与外界交互。

面向对象的程序设计思想

 

面向对象的程序设计

OO的定义:

面向对象的方法学可以用下列方程来概括:

OO^Objects+(lasses+Inheritance+Communication

Withmessages

【分析]:

只有同时使用对象、类、继承和消息的方法,才是真正面向对象的方法・所开发的程序才是面向对象的程序。

面向对象的程序设计

•[小结]:

用类和对象作为系统的基本构成单位。

对象对应问题域中的事物,其属性与服务刻画了事物的静态特征和动态特征,它们之间的继承关系、聚合关系、消息和关联如实地表达了问题域中事物之间实际存在的各种关系。

•主要优点:

-与人类习惯的思维方法比较一致;

-稳定性好;

-可重用性好;

可维护性好。

面向对象方法与传统方法的比较

传统方法

面向对象方法

数据结构+算法=程序设计

以对象为中心组织数据与操作

数据

对象的属性

操作

对象的方法

数据类型与变量

类与对象实例

函数(过程)调用

消息传送

类型与子类型

一般类与特殊类,继承

构造类型

整体-部分结构,聚合

指针

关联

在软件生命周期全过程运用面向对象方法

L.M.Northrop:

-尽管面向对象语言正取得令人振奋的发展,

但编程并不是软件开发问题的主要根源。

需求分析与设计问题更为普遍并且更值得解决。

因此面向对象开发技术的焦点不应该只对准编程阶段,而应更全面地对准软件工程的其他阶段。

面向对象方法真正意义深远的目标是它适合于解决分析与设计期间的复杂性并实现分析与设计的复用。

面向对象的开发不仅仅是编程,必须在整个软件生命周期

采用一种全新的方法,这一观点己被人们所接受。

——《软件工程百科全书》纽约,1994

 

面向对八\

的软件軽护J

面向对象程序设计的特点

1.抽象性

2・封装性

3・继承性

4.多态性

物第3*而勺对象僅容讼计

1.抽象性

•抽象是指从具体的实例中抽取出共同的性质并加以描述的过程。

•在面向对象方法中,抽象是通过对一个系统进行分析和认识,强调系统中某些本质的特性,而对系统进行的简化描述.

•对问题的抽象包括两个方面:

数据抽象和行为抽象.数据抽象为程序员提供了对对象的属性和状态的描述。

-行为抽象则是对这些数据所需要的操作的抽象。

抽象性

•用C++语言可以将该图形描述如下:

-对象名:

circle

-数据抽象:

doublex,y,r;

行为抽象:

setxO;setyO;setrO;drawO;areaO;moveO;geti*O;

•抽象是面向对象方法的核心。

抽象性

•类(Class)的定义:

对具有相同数据和相同操作的一组相似对象的定义。

BP:

类是对具有相同属性和行为的一个或多个对象的描述。

•类(Class)的特征:

-类的定义包括一组数据属性和在数据上的一组合法操作。

-类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。

-在一个类中,每个对象都是类的实例,它们都可使用类中的函数。

 

类与对象的关系:

类o对象抽象定义o实例

例.模具O由模具压出的工件

学生O学生王强

PPT模板O应用模板产生的文件

数据类型o变量,如C语言中的int和intx;

物第3*而甸对象爼序讼计

2.封装性

•封装性就是信息隐藏,把对象的实现细节对外界隐藏起来。

•对象是面向对象程序语言中支持并实现封装的机制.

•对象中既包含数据(属性),又包含对这些数据进行处理的操作代码(行为),它们都称为对象的成员。

•对象中的成员可以定义成公有的或私有的。

私有成员即在对象中被隐藏的部分,不能被该对象以外的程序访问;

公有成员则提供对象与外界的接口,外界只能通过这个接口与对象发生联系。

第3*而劎对

封装性

•使用一个对象的时候,只需知道它向外界提供的接口形式而无须知道它的数据结构细节和实现操作的算法.

•对象有效实现了封装的两个目标:

-对数据和行为的包装

-信息隐藏

•封装可以使得程序中各部分之间的相互影响达到最小,并且提高程序的安全性,简化代码的编写工作。

3.2类和对象

第3命而创对拿段序讼计

3.2.1类的声明

•类的声明即类的定义,类似于结构体的声明。

•类的定义分为两部分:

说明部分和实现部分•

说明部分主要用来说明类中的成员,包括数据成员和成员函数。

实现部分主要用来给出说明部分中说明的成员函数的实现或定义。

1•类的声明形式

•一般形式为:

第3*而甸对象爼序谡计

类的声明形式

•说明:

-Cl谿、是定义类的关键字。

-类名是一种标识符,必须符合标识符的定义规则。

-类定义必须以分号“;"结束。

-关键字public、protected和仪称为访问权限修饰符,限制了类成员的访问控制范围.

》声明为private的成员和声明为publi啲成员的次序任意.

》类体中不一定都包含priviHe和public部分,可以只有public部分或者private部分.

》默认为private.

[例]:

classStudent〃声明类类型

{public:

〃声明以下部分为公有的

;voiddisplayO

成员函数J{cout«unum:

H

Icout<

M«name«endl;

i

[cout«nsex:

n«sex«endl;}

pH呷二"頁阴以1里盼为冠肴曲

;intnum;:

数据成员*;charname[20];;

:

charsex;:

};

 

[例h下面给出一个关于日期类的定义,该类是对日期的

抽象,该类的对象是一个具体的日期.

public:

…7庐两以卞颈分为公有的

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■IvoidsetDate(inty,intm,intd);

:

voidsetYear(inty);

:

voidsetMonth(intm);

成员函数一

voidsetDay(intd);intgetYear();intgetMonth();intgetDate();

voidshowDate(};

2•类的数据成员

•类中的数据描述类的属性。

•数据成员的定义方式与一般变量相同,但对数据成员的访问要受到访问权限修饰符的控制。

•在定义数据成员时,要注意以下几个问题:

类中的数据成员的类型可以是C++语言所允许的所有类型,但是自身类的对象是不允许的,而自身类的指针或引用是可以的。

在类体内不允许对数据成员进行初始化。

第3車而向对计

[例h

classA

{public:

voidg(intx,inty);

private:

Aobj_1;〃obj_l是自身类上的对象,错课

A*obL2;//<>bj_2是指向自身类.A的指针,正确

intx(2004),y(40);〃初始化,错误

};

A

J、

3•类的成员函数

•类的成员函数描述类的行为.是对封装数据进行操作的唯一途径,又称为“方法”.

•程序中通过类的成员函数来访问其内部的数据成员,成员函数是类与外部程序之间的接口。

•成员函数必须在类体内给出原型说明,而成员函数的实现,可以放在类体内,也可以放在类体外。

classRectangle

{intxfy,weight,high;

public:

voidSetValue(intxx,intyy,intw,inth){x=xx;y=yy;weight=w;high=h;}intArea();

};

第3*面创对象程序很计

1)在类外定义成员函数

•在类体内给出成员函数的原型声明,说明该成员函数的形参和返回值类型,在类体外给出成员函数的实现.

•通常采用下面的形式定义成员函数:

V类型标识符〉V类名>:

:

数名〉(V形参表〉){<函数体〉作用域运算符

•作用域运算符:

-指出成员函数属于哪一个类。

-即使几个类中的方法名相同,也可以区分。

#include

classRectangle

{public:

问控制:

函数返回值函数名(参数列表I

voidSetValue(intxxjntyy,intw,inth){x=xx;y=yy;weight=w;high=h;}voidMove(intxxjntyy)

{x=XX;y=yy;}

voidSetSize(intw,inth);II公有成员函数原型声明intArea();

private:

intxfy,weiqht,hiqh;

};—访问控制:

类名:

:

函数返回值函数名(參数列表)

voidRectang1e^SetSize(intwjnth)〃在类外定义SetSize函数{weight=w;high=h;}intRectangle:

:

Area()

{returnweight*high;}

2)inline成员函数

•放在类体内定义的函数被默认为内联(inline)函数,而放在类体外定义的函数是一般函数。

•如果要将定义在类体外的成员函数也作为内联函数处理,则需在该成员函数的定义前加上关键字"inline-,以显

式说明该成员函数也是一个内联函数。

[例如]:

将上例中可SetSizeQ函数定义为内联函数的方法如下:

inlinevoidRectangle:

:

SetSize(){•…}

3)带默认参数的成员函数

•类的成员函数也可以带默认参数,其调用规则和普通函数相同。

[例如]:

在矩形类Rectangl冲的成员函数SetSizeO可以带默认参数,定义如下:

voidSetSize(intw=20,inth=30);

voidSetSize(intw,inth=30);

第3命而向对序讼计

3.2.2对象

•类和对象的关系相当于普通数据类型与其变量的关系。

•类是一种逻辑抽象概念,声明一个类只是定义了一种新的

数据类型,说明对象才真正创建了这种数据类型的物理实

体。

•由同一个类创建的各个对象具有完全相同的数据结构,但

它们的数据值可能不同・

1•对象的定义

•一般语法:

(D定义类的同时直接定义类的对象.class类名

{成员变議表列;

成员函数表列;

}对象儿对象2,...];

(2)先定义类,再定义类的对象.

类名对象儿对象2,・・・];

•可声明多个对象,对象之间代码共享,数据独立。

第3*而甸对象程序讼计

对象的定义

[说明]:

•声明一个类则声明了一种类型,它并不接收和存储具体的

值,只作为生成具体对象的一种“样板”,只有定义了对象后,系统才为对象并且只为对象分配存储空间。

・在声明类的同时定义的对象是一种全局对象,在它的生存期内任何函数都可以使用它。

・因为在C++的程序中,类的声明和类的使用是分开的,类并不只为一个程序服务。

因此,在实际的程序开发中,一般采用使用时再定义对象的方法。

 

2•对象的引用

•类中成员互访:

直接使用成员名

•类外访问:

有三种形式

-通过对象名和对象选择符访问对象中的成员:

通过指向对象的指针访问对象中的成员;

-通过对象的引用变量访问对象中的成员。

对象的引用

1)通过对象名和对象选择符访问对象中的成员

•一般形式为:

v对象名〉.<公有数据成员名〉或

V对象名>・V公有成员函数名(实参表)〉其中,称为对象选择符,简称点运算符。

例3・0

#inelude

classRectangle

{intx,y,weight,high;public:

voidSetValue(intxxjntyyjntwjnth)

A.x

10

A.y

20

A.weight

100

A.high

200

B.x

15

B.y

25

B.weight

150

B.high

250

{x=xx;y=yy;weight=w;high=h;}voidMove(intxxjntyy){x=xx;y=yy;}voidSetSize(intwjnth){weight=w;high=h;}intArea(){returnweight*high;}

};

voidmain()

{RectangleA,B;

A.SetValue(10,20,100,200);

B.SetValue(15,25,150,250);

A.Move(20,30);A.SetSize(150,250);

B.Move(25,35);B.SetSize(160,200);cout«B.Area()«endl;

}

对象的引用

2)通过指向对象的指针访问对象中的成员

classRectangle

{public:

intweightfhigh;

};

RectangleRectf*p;p=&Rect;cout«p->weight;

p->weight表示p当前指向的对象ReZ中的成员weight•也可用(*p).weight表示对象Rect中的成员weighto

对象的引用

3)通过对象的引用变量访问对象中的成员

classRectangle

{public:

intweightfhigh;

};

RectangleRecti;

Rectangle&Rect2=Recti;

cout«Rect2.weight;

3.this指针——自引用指针

•用类去定义对象时,系统会为每一个对象分配存储空间,如果对同一个类定义了n个对象,则有n组同样大小的空间以存放n个对象中的数据成员。

•但是,不同的对象都调用同一个函数代码段。

[问题h

当不同对象的成员函数引用数据成员时,怎么保证引用的是所指定的对象的数据成员呢?

例如,

RectangleRecti,Rect2;

Recti.SetSize(20,30);

Rect2.SetSize(20,20);

this指针

[解决方法h

•C++专门设立了一个名为的指针,用来指向不同的对象。

•例如,SetSizeO的原型实际上为:

voidRectangle:

:

SetSize(Rectangle•this,intw,inth);因此,当调用

Recti・SetSize(20,30);

时,实际上是用以下的方式调用:

Recti.SetSize(&Rect1}20,30);

即系统将一个指向R“tl对象的指针作为函数的第一个参数传递给了函数•

第3*而向对计

this指针

[说明]:

•函数SetSi/eO的实现中,所有涉及到类的数据成员的操作都隐含为对函数第一个参数所指的对象的操作,即对Uhk的操作•

•函数SetSizeO的实现相当于:

voidRectangle:

:

SetSize(Rectangle*thisintw,inth)

{this->weight=w;this->high=h;}

•this指针是成员函数的一个隐含参数,一般情况下不用・

•但有时也需要用到,比如需要在成员函数的实现过程中访问山认所指的对象本身,而不是其各个成员。

例451

程序运行结果:

n=l0

n=15

#includeclassThisSample{intn;public:

ThisSample(H}ThisSample(intm){n=m;}voidAddvalue(intm)〃定义一个非静态成员函数{ThisSampleq;〃函数内前临时对条q.n=n+m;〃此处n相当于this・>n

*this=q;〃将临时对象q的值传回调用对象

}voidDisp(){coutvv”n="vvnvvendl;}

};voidmain(){ThisSamples(10);

s.Disp();

s.Addvalue(5);〃相当于函数调用:

Addvalue(&s,5);s.Disp();

对象小结

•抽象数据类型以外部的观点描述数据类型,强调信息隐藏,要隐藏实现细节和不允许外部访问的部分。

•对象把类成员分为公有、私有和保护,外界不能访问一个对象的私有部分,与对象的信息传送只能通过公有成员进行。

保护类成员与派生和继承有关.

•对象名.成员方式只能访问对象中的公有成员,访问私有成员将产生错误。

•对象中的私有成员是类中隐藏的数据,不允许在类外的程序中被直接访问,只能通过该类的公有成员函数来访问。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1