第三章 小 结
(1) C++中的 class 类型是 C 语言结构体的延伸,把结构类型引申成 class 类型,结构变量就引申为对象,并把成员函数纳入其中,这不是简单的重复,而是螺旋式上升到新的高度,发生了质的飞跃
。初学者可参照表 3.2 用比较法加深理解。
(2) 类是抽象数据类型 ADT 的实现,类有两种成员:数据成员和成员函数,它们都可以放在公有部分、私有部分或保护部分。数据成员用来描述该类对象的属性,通常总是把它指定为私有的,以实现
数据封装和信息隐藏;而将成员函数指定为公有的,作为该类对象访问私有数据成员的一条消息通路,提供给外界使用。初学者在设计一个类时,应遵循两个原则:1)考虑程序的安全性把数据成员都放
在私有部分;2)公有成员函数是为用户提供服务的、完成该类所规定的各项任务和功能,也是访问本类所有私有数据成员的一条消息通路,常称为“接口(interface) ”所以,编程者应根据编程目的
,努力使一个类的“接口”既完善且最小化。
(3) 成员函数由于隐含有 this 指针,其函数体内是访问本类成员的广阔天地,是对该类所有成员,特别是对私有数据成员进行操作的最重要场所,不管它们是公有的、私有的还是保护的。
(4) 用户定义了一个类也就创建了一个新的数据类型,即可把“类名”作为数据类型名直接去定义该类的对象。构造函数和析构函数是创建对象和撤销对象的特殊成员函数,构造函数可以重载,而析构
函数只能有一个。系统自动地为无构造函数和无析构函数的类提供默认的构造函数和析构函数,以实现创建和撤销对象的管理运行机制,系统还为无复制构造函数的类提供默认的复制构造函数,但它只
适用于浅拷贝,不能用于深拷贝。
(5) 静态数据成员可以取代所有的全局变量, 但它不同于用 static 指定存储类的静态对象,而是 class 类型中特殊的数据成员,其特殊就表现在该类的所有对象只有一个静态数据成员值,起着连接
该类所有对象的桥梁作用。而用 static 指定对象的存储类是论及对象所占用内存空间的位置及其作用域、可见性和存在期等。应注意区分同样都是使用关键字 static,但所指的含义却是两个不同的概
念。静态成员函数无 this 指针专门负责访问静态数据成员,其直接调用法是打通被封装的私有数据成员消息通路的有力工具。若要使它能访问非静态数据成员,需传递一个该类的对象指针和对象引用
或者对象本身以替代 this 指针。
(6) 友元不是成员函数而无 this 指针,其作用主要是提高程序运行效率和便于编程,在运算符重载中发挥着重要作用。
(7) 对象数组的每个元素都是同一 class类型的对象,创建一个对象数组可用初始化列表按元素排列顺序调用元素所属类的构造函数,撤销时按相反的顺序调用析构函数。它也具有与基本数据类型数组
一样的属性。如数组名为该数组存储空间的首地址、数组和指向它的指针变量间的关系等式、访问每个元素都是使用统一的地址计算公式等。
(8) 容器类是应用广泛的实用化数据类型,是组合技术的具体实现。其构造函数应包含对象成员的初始化,应定义足够的公有成员函数访问对象成员的私有成员,特别是私有数据成员。
(9) 在大型软件工程项目中, 使用名空间和 using 声明语句是避免同名标识符的冲突,消除模棱两可的“二义性”问题的最好办法。编程者可以自行定义命名不同的多个名空间,每个名空间的名字在
所使用的程序区域内必须是惟一的,从而将 C++系统提供的惟一的、庞大的全局性名空间(globle namespace)划分成多个名空间,处于不同名空间内的同名标识符不会发生冲突,即便它们出现在同一
个编译单位的源文件中。采用using 声明语句也能方便地把一个名空间或者它的一个成员引入到正在编写的程序区域。为了使用
C++新标准中的类库、函数库和流库等,初学者必须掌握如何使用 using 声明语句把 std标准名空间引入到当前程序区域。
(10) C++可定义自动对象、静态对象、外部对象和动态对象,它们具有不同的作用域、生存期和可见性。 只有用new运算符创建的动态对象才能由编程者用delete运算符撤销,而其他存储类的对象(包
括基本数据类型的变量)都是由系统自动地进行管理。
评论