【php精品源码栏目提醒】:本文主要为网学会员提供“【精品】第8章面向对象技术基础 - 其它资料”,希望对需要【精品】第8章面向对象技术基础 - 其它资料网友有所帮助,学习一下!
第8章 面向对象技术基础 欢迎开启面向对象设计的大门,在第1章中已经简 要介绍过面向对象设计的基本理念,本章将具体 讲述类和对象的概念。
在前面的章节中,程序是 由一个个函数组成的,是结构化的编程方法。
从 本章开始,编写的程序是由对象组成的,将要学 习用C语言进行面向对象的程序设计,当然,面 向对象设计也离不开函数等前面讲述的基础知识。
8.1 面向对象基本概念 “对象”(object)是个抽象的概念,现实世界中的任何事 物都可以看成是对象,动物、植物、摩托车、汽车等等都 是对象,对象之间有很大的差异,如人和汽车,但有的对 象间有相似之处,比如摩托车和自行车,它们有共同的特 征(有轮子),同样的功能(人的交通工具),也有不同 的特征,如“轮子个数”,“车子重量”等等,基于此, 可将“有轮子”,“可更换轮胎”、“能作为人的交通工 具”抽象成一个类别(class),可称之为“车”类,摩托 车和自行车是该类别的对象。
类的提取往往是从两个方面来考虑的,一是特征(C常称 为“属性”)、另一个是功能(C中常称为“行为”), 具备类中定义的“属性”和“行为”的对象都是该类的对 象,因此,我们可以说,电动车也是“车”类的对象。
8.1.1 类的概念 类和对象的关系与 “结构”和“结构体变量”的关系相似。
C用类来描述对象,类是对现实世界中相似事物的抽象,同是 “双轮车”的摩托车和自行车,有共同点,也有许多不同点。
“车”类是对摩托车、自行车、汽车等相同点和不同点的提取与 抽象,如所示。
类的定义分为两个部分:数据(相当于属性)和对数据的操作 (相当于行为)。
从程序设计的观点来说,类就是数据类型,是 用户定义的数据类型,对象可以看成某个类的实例(某个类的变 量),类和对象的关系与前面介绍的“结构”和“结构体变量” 的关系相似,但又有不同,在本章稍后类的定义一节中后具体说 明这一问题。
8.1.2 类是分层的 每一大类中可分成若干小类,也就是说,类是分层的,如图8.2所示。
可将所有的图 形抽象成“图形”类,该类中共同的属性有很多,这里只取“颜色”这个属性,对所 有图形而言,都可定义“显示”操作。
同时,“图形”类可进一步分为“一维图形” 类、“二维图形”类和其他类,根据形状的不同,“一维图形”类可进一步分为“直 线”类和“折线”类,“二维图形”类又可分为“正方形”类和“圆”类。
下层的类 除了“继承”了上层类中定义的属性和行为外,还可增加新的属性和行为(如“圆” 类相比“二维图形”类增加了“圆心”和“半径”属性,增加了“求面积”这一行 为),甚至可以在下层类中重新定义上层类已定义的属性和行为(如“直线”类、 “折线类”、“正方形”类和“圆”类中都重新定义了“图形”类中已定义的“显示” 操作)。
8.1.3 类和对象的关系 对象需要从属性和行为两个方面进行描述,类是对象的封 装。
类的使用主要有以下几个步骤: 定义一个类,C中,分别用数据成员和函数成员来表现对 象的属性和行为。
类的定义强调“信息隐藏”,将实现细 节和不允许外部随意访问的部分屏蔽起来。
因此,在类定 义中,需要用public或private将类成员区分开(此外,还 有protected型的数据成员,稍后会有详细介绍),外界不 能访问程序的private成员,只能访问public数据成员,对 象间的信息传送也只能通过public成员函数,保证了对象 的数据安全。
类的实现,即进一步定义类的成员函数,使各个成员函数 相互配合以实现接口对外提供的功能,类的定义和实现是 由类设计者完成的。
通过该类声明一个属于该类的变量(即对象),并调用其 接口(即public型的数据成员或函数成员),这是使用者 的工作。
8.2 C类的定义 先来看一下类是如何定义的,对一些通用的问题, 前人已经定义好了很多的类,比如微软的MFC类库, 程序员不必关心其内部细节,只要抱着“拿来主 义”的态度就好,但对某些特殊问题来说,必须 由自己提炼模型,进行类的定义。
8.2.1 类定义的基本形式 C中使用关键字class定义一个类,其基本形式 如下: class类名 public: 公共成员函数 private: 私有成员函数 私有的数据成员定义 8.2.2 类定义示例 对一台计算机来说,它有如下特征: 属性:品牌、价格。
方法:输出计算机的属性。
实现了computer类的定义:8.2.3 class和struct class的定义看上去很像struct定义的扩展,事实 上,类定义时的关键字class完全可以替换成 struct,也就是说,第5章中介绍的结构体变量也 可以有成员函数。
class和struct的唯一区别在于: struct的默认访问方式是public,而class为 private。
提示:通常使用class来定义类,而把struct用于 只表示数据对象、没有成员函数的类。
8.3 C类的实现 类的实现就是定义其成员函数的过程,类的实现 有两种方式:一是在类定义时同时完成成员函数 的定义。
另一是在类定义的外部定义其成员函数。
8.3.1 在类定义时定义成员函数 成员函数的实现可以在类定义时同时完成,如: (详细内容请参照本书)8.3.2 在类定义的外部定义成员函数 在类定义的外部定义成员函数时,应使用作用域操作符(::)来标识函数所属的类, 即有如下形式: 返回类型 类名::成员函数名参数列表 函数体 其中,返回类型、成员函数名和参数列表必须于类定义时的函数原型一致,这样,可 改写为:8.4 C类的使用 定义了一个类之后,便可以如同用int、double等 类型符声明简单变量一样,创建该类的对象,称 为类的实例化。
由此看来,类的定义实际上是定 义了一种类型,类不接收或存储具体的值,只作 为生成具体对象的“蓝图”,只有将类实例化, 创建对象(声明类的变量)后,系统才为对象分 配存储空间。
8.4.1 声明一个对象 使用类定义声明了一个对象,并利用对象名实现 了public成员函数的调用:8.4.2 对象的作用域、可见域和生存期 对象的作用域、可见域和生存期与普通变量,如 int型变量的作用域、可见域和生存期并无不同, 对象同样有局部、全局和类内(稍后就将对对象 成员进行介绍)之分,对于在代码块中声明的局 部对象,在代码块执行结束退出时,对象会被自 动撤销,对应的内存会自动释放(当然,如果对 象的成员函数中使用了new或malloc申请了动态内 存,却没有使用delete或free命令释放,对象撤 销时,这部分动态内存不会自动释放,造成内存 泄露)。
8.5. 对象的创建和撤销 中,通过自定义的公共成员函数SetBrand是 SetPrice实现对对象数据成员的初始化,实际上, C为类提供了两种特殊的成员函数,一是构造函 数,在对象创建时自动调用,用以完成对象成员 变量等的初始化及其他操作(如为指针成员动态 申请内存空间等);另一个是析构函数,在对象 撤销时自动调用,用以执行一些清理任务,如释 放成员函数中动态申请的内存等。
8.5.1 构造函数的作用 当对象被创建时,构造函数自动被调用。
构造函 数有一些独特的地方:函数的名字与类名相同, 没有返回类型和返回值。
其主要工作有: 给对象一个标识符。
为对象数据成员开辟内存空间。
完成对象数据成员的初始化(函数体内的工作, 由程序员完成)。
上述3点也说明了构造函数的执行顺序,在执行函 数体之前,构造函数已经为对象的数据成员开
上一篇:
【精品】ARM启动代码详细注释
下一篇:
中小学生社会教育市场调查综述