02-包含对象成员的类
14.1 包含对象成员的类
首先介绍包含对象成员的类。有一些类(如string类和第16章将介绍的标准C++类模板)为表示类中的组件提供了方便的途径。下面来看一个具体的例子。
学生是什么?入学者?参加研究的人?残酷现实社会的避难者?有姓名和一系列考试分数的人?显然,最后一个定义完全没有表示出人的特征,但非常适合于简单的计算机表示。因此,让我们根据该定义来开发Student类。
将学生简化成姓名和一组考试分数后,可以使用一个包含两个成员的类来表示它:一个成员用于表示姓名,另一个成员用于表示分数。对于姓名,可以使用字符数组来表示,但这将限制姓名的长度。当然,也可以使用char指针和动态内存分配,但正如第12章指出的,这将要求提供大量的支持代码。一种更好的方法是,使用一个由他人开发好的类的对象来表示。例如,可以使用一个String类(参见第12章)或标准C++ string类的对象来表示姓名。较简单的选择是使用string类,因为C++库提供了这个类的所有实现代码,且其实现更完美。要使用String类,您必须在项目中包含实现文件string1.cpp。
对于考试分数,存在类似的选择。可以使用一个定长数组,这限制了数组的长度;可以使用动态内存分配并提供大量的支持代码;也可以设计一个使用动态内存分配的类来表示该数组;还可以在标准C++库中查找一个能够表示这种数据的类。
自己开发这样的类一点问题也没有。开发简单的版本并不那么难,因为double数组与char数组有很多相似之处,因此可以根据String类来设计表示double数组的类。事实上,本书以前的版本就这样做过。
当然,如果C++库提供了合适的类,实现起来将更简单。C++库确实提供了一个这样的类,它就是valarray。