第三篇 面向对象的C++

    第8章 面向对象技术基础

    欢迎开启面向对象设计的大门,在第1章中已经简要介绍过面向对象设计的基本理念,本章将具体讲述类和对象的概念。从前面的介绍可知,程序是由一个个函数组成的,是结构化的编程方法。从本章开始,编写的程序是由对象组成的,将要学习用C++语言进行面向对象的程序设计,当然,面向对象设计也离不开函数等前面讲述的基础知识。

    本章主要涉及以下知识点。

    ❑面向对象的概念:介绍什么是面向对象和类。

    ❑C++中类的定义:介绍类的定义及其和结构体的差别。

    ❑C++类的实现:介绍类的成员函数的定义。

    ❑C++类的使用:介绍如何使用类来定义对象及其作用、可见域和生存期。

    ❑对象的创建和撤销:介绍构造及析构函数。

    ❑复制构造函数:介绍复制构造函数调用机制带来的问题及解决方法。

    ❑类中的特殊数据成员:介绍类中各种特殊数据成员。

    ❑特殊函数成员:介绍类中的静态成员函数。

    ❑对象的组织:介绍const、对象指针、this指针、对象数组及对象链表。

    ❑为对象分配内存:介绍new和delete进行对象的分配和释放。

    8.1 面向对象基本概念

    “对象”(object)是个抽象的概念,现实世界中的任何事物都可以看成是对象,动物、植物、摩托车和汽车等都是对象,对象之间有很大的差异,如人和汽车,但有的对象间却有相似之处,比如摩托车和自行车,它们有共同的特征—有轮子,同样的功能—人的交通工具,也有不同的特征,如“轮子个数”及“车子重量”等,基于此,可将“有轮子”、“可更换轮胎”及“能作为人的交通工具”抽象成一个类别(class),可称为“车”类,摩托车和自行车是该类别的对象。

    类的提取往往是从两个方面来考虑的,一是特征(C++常称为“属性”)、另一个是功能(C++中常称为“行为”),具备类中定义的“属性”和“行为”的对象都是该类的对象,因此,我们可以说,电动车也是“车”类的对象。

    第二篇讨论的是结构化的程序设计,要解决某一个问题,就要确定这个问题能够分解为哪些函数,数据能够分解为哪些基本的类型。结构化的思考方式是面向机器结构的,不是面向问题结构的,需要程序员在问题结构和机器结构之间建立联系。而面向对象的程序设计针对的是问题的结构,解决某个问题,要确定该问题由哪些对象组成,以及对象间的相互关系是什么?这样,思维方式更贴合现实,程序的组织也更清晰。

    8.1.1 类的概念

    类和对象的关系与“结构”和“结构体变量”的关系相似。

    C++用类来描述对象,类是对现实世界中相似事物的抽象,同是“双轮车”的摩托车和自行车,有共同点,也有许多不同点。“车”类是对摩托车、自行车及汽车等相同点和不同点的提取与抽象,如图8.1所示。

    第三篇 面向对象的C++ - 图1

    图 8.1 “车”类示意图

    类的定义分为两个部分:数据(相当于属性)和对数据的操作(相当于行为)。从程序设计的观点来说,类就是数据类型,是用户定义的数据类型,对象可以看成某个类的实例(某个类的变量),类和对象的关系与前面介绍的“结构”和“结构体变量”的关系相似,但又有不同,在本章稍后类的定义一节中会具体说明这一问题。