// an array of int
// an array of double
// an array of int, size 0
// an array of 8 int elements
// an array of 8 int elements, each set to 10
// use a string object for name
实现代码。要使用String类,您必须在项目中包含实现文件string1.cpp。
对于考试分数,存在类似的选择。可以使用一个定长数组,这限制了数组的长度;可以使用动态内存
分配并提供大量的支持代码;也可以设计一个使用动态内存分配的类来表示该数组;还可以在标准C++库
中查找 ·个能够表示这种数据的类。
当然,如果C++库提供了合适的类,实现起来将更简单。C++库确实提供了一个这样的类,它就是
valarray .
14.1.1 valarray 类简介
valarray 类是由头文件 valarray支持的。顾名思义,这个类用于处理数值(或具有类似特性的类),它
支持诸如将数组中所有元素的值相加以及在数组中找出最大和最小的值等操作。valarray 被定义为一个模
板类,以便能够处理不同的数据类型。本章后面将介绍如何定义模板类,但就现在而言,读者只需知道如
何使用模板类即可。
模板特性意味着声明对象时,必须指定具体的数据类型。因此,使用valarray类来声明一个对象时,
需要在标识符valarray 后面加上一对尖括号,并在其中包含所需的数据类型:
valarray<int> q_values;
valarray<double> weights;
这是读者需要学习的惟…新句法,它非常简单。
类特性意味着要使用 valarray 对象,需要了解这个类的构造函数和其他类方法。下面是几个使用其构
造函数的例子:
double gpa(5] - (3.1, 3.5, 3.8, 2.9, 3.3);
valarray<double> v1;
valarray<int> v2(8);
valarray<int> v3(10,8);
valarray<double> v4 (gpa, 4); // an array of 4 elements//initialized to the first 4 elements of gpa
从中可知,可以创建长度为零的空数组、指定长度的空数组、所有元素都被初始化为指定值的数组以
及用常规数组中的值进行初始化的数组。
下面是这个类的一些方法:
● operator[]:让您能够访问数组中的元素。
● size :返回数组中包含的元素数。
● sum:返回所有元素的总和。
● max:返回最大的元素。
min:返回最小的元素。
还有很多其他的方法,其中的一些将在第16章介绍;但就这个例子而言,上述方法足够了。
14.1.2 Student类的设计
至此,已经确定了Student类的设计计划:使用一个string对象来表示姓名,使用一个valarray<double>
来表示考试分数。那么如何设计呢?读者可能想以公有的方式从这两个类派生出Student类,这将是多重
公有继承,C++允许这样做,但在这里并不合适,因为学生与这些类之间的关系不是is-a模型。学生不是
姓名,也不是一组考试成绩。这里的关系是has-a,学生有姓名,也有一组考试分数。通常,用于建立
has-a 关系的C++技术是组合(包含),即创建一个包含其他类对象的类。例如,可以将Student类声明为
如下所示:
class Student
private:
string name;
valarray<double> scores; // use a valarray<double> object for scores
1;