一般情况下,封装的意思是提取出一段代码,包装在一个函数里,这样使你能够在适合的地方使用此函数。我们已经看到过两个封装的示例:4.3小节的printParity函数和5.8小节的isSingleDigit。
泛化的意思是提取出特例的代码(如打印2的倍数),修改它使之更通用(如打印任意整数的倍数)。
下面的函数封装了前一小节的循环代码,并泛化为打印n的倍数。
void printMultiples (int n)
{
int i = 1;
while (i <= 6) {
cout << n*i << " ";
i = i + 1;
}
cout << endl;
}
封装要做的就是添加第一行代码,声明了函数名、参数和返回值类型。泛化要做的就是用参数n取代原来的2。
如果我们调用此函数时,给参数赋值为2,我们的输出就和之前一样。如果参数值为3,则输出为:
3 6 9 12 15 18
如果参数值为4,则输出为:
4 8 12 16 20 24
现在你大概可以猜到我们将怎样取打印乘法表:使用不同的参数值反复调用printMultiples。事实上我们将使用另一个循环来迭代打印各行。
int i = 1;
while (i <= 6) {
printMultiples (i);
i = i + 1;
}
首先要注意这个循环和printMultiples内部那个循环的相似之处。我所做的只是用一句函数调用取代打印语句。
这段程序的输出如下:
1 2 3 4 5 6
2 4 6 8 10 12
3 6 9 12 15 18
4 8 12 16 20 24
5 10 15 20 25 30
6 12 18 24 30 36
这就是一个(有点粗糙的)乘法表。如果你受不了这种粗糙,就请将列之间空格替换为制表符,看看输出什么。