欢迎来到天天文库
浏览记录
ID:33931556
大小:823.53 KB
页数:33页
时间:2019-02-28
《c语言chapter10》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、下载第10章C++入门90年代以来,面向对象的程序设计(Object-OrientedProgramming,简称OOP)异军突起,迅速在全世界流行,一跃成为主流的程序设计技术。在软件市场中,覆盖面大、垄断市场的新一代程序设计语言、软件开发工具和环境以及操作系统大多是面向对象的。10.1面向对象的概念10.1.1面向对象的程序结构面向对象的程序设计是一种基于结构分析的、以数据为中心的程序设计方法。在面向对象的程序中,活动的基本单位是对象,向对象发送消息可以激活对象的行为。为此,许多人把面向对象的程序描述为:程序=对象+消息传递1.对象对象类似于C语言中的变量,可以泛指自然界中的
2、任何事务,包括具体实物和抽象概念。对象具有一些属性、状态和行为。例如,每个人都有姓名、性别、年龄、身高、体重等属性,有工作、学习、吃饭、睡觉等行为。所以,对象一般可以表示为:属性+行为。在面向对象的程序设计中,对象被表示为:数据+操作,操作也称为方法。这就是说,面向对象程序设计中的对象是指由一组数据和作用于其上的一组方法组成的实体。2.类在面向对象的程序设计中,会涉及到许多对象,我们无法将所有的对象都描述清楚,如果那样做的话,程序将无限长或无法描述。因此在面向对象的程序设计中引入了类的概念,将同类的对象归于一类,同类对象具有相同的属性和行为,如各种花同属一类,各种草、植物等也分
3、别属于不同的类。3.消息消息就是对对象进行某种操作的信息。当要求对象执行某种特定操作时,就向该对象发送操作消息,对象接收到指定操作的消息后,就调用相应的操作方法,完成有关操作。消息及其传递机制是面向对象程序设计的一个重要角色。对象的一切活动,都要通过消息来驱动,消息传递是对象间通信的唯一途径。4.方法方法就是对对象进行的某种操作。当对象接收到相应的消息时,就调用对应的方法完成指定的操作,有了消息,就驱动对象工作;有了方法,就能实现消息所要求的操作。5.继承继承是面向对象语言的另一个重要概念。在客观世界中,存在着整体与个体的关系、一般与特殊的关系,继承将后者模型化。206C语言程
4、序设计下载例如,对人的分类我们用图10-1描述如下。在类的层次结构图中,下层节点都具有上层节点的特性,都具备人的共同特点。但下层节点较之上层节点而言,又具有新的特性,是上层节点人所不具有的。这种下层节点对上层节点的特性的保持,就是我们所说的继承。在面向对象语言中,类功能支持这种层次结构。除工人农民解放军了根结点外,每个类都有它的超类,又称为父类或基类。除了叶结点外,每个类都有它的子类,又称为派生类。一个子类可以从它的基类继承所有的数据和操作,并扩海军空军陆军充自己的特殊数据和操作。基类抽象出共同的属性和操作,子类体现其差别。有了类的层次结构和继承性,不图10-1对人的分类同对象
5、的共同特性只需定义一次,用户就可以充分利用已有的类,进行完善和扩充,达到软件可重用的目的。10.1.2C++的类C++语言是一种面向对象的程序设计语言,是对传统C语言的完善和扩充,并支持面向对象的概念:对象、类、方法、消息和继承,下面给出一个C++关于类的结构:[例10-1]栈操作。栈是一种后进先出的数据结构,我们利用数组这个静态的存储来实现栈、充当栈,完成数据的压栈和出栈。#include"iostream.h"#defineSIZE100//定义栈类型classstack/*定义类*/{intstck[SIZE];/*数据成员,整型数组做堆栈*/inttop;/*栈顶指针*
6、/public:voidinit(void);/*初始化成员函数*/voidpush(inti);/*压栈*/intpop(void);/*出栈*/};//栈的初始化voidstack:::init(void)/*类成员函数的定义*/{top=0;/*定义栈顶指针指向数组头*/}//进栈操作voidstack::push(inti){if(top==SIZE){cout<<"Thestackisfull!";/*栈满*/return;第10章C++入门207下载}stck[top]=i;/*压入数据到栈顶*/top++;/*指针加1*/}//出栈操作intstack::pop(
7、void){if(top==0){cout<<"Thestackisunderflow!";/*栈空,无数据*/return0;}top--;/*指针减1*/returnstck[top];/*返回栈顶元素*/}voidmain(void){stackstack1,stack2;//创建对象,stack1.init();/*调用成员函数,对栈初始化*/stack2.init();stack1.push(1);//在stack1栈中,压栈1。stack2.push(2);//在stack2栈中
此文档下载收益归作者所有