6.6 封装和泛化

优质
小牛编辑
132浏览
2023-12-01

一般情况下,封装的意思是提取出一段代码,包装在一个函数里,这样使你能够在适合的地方使用此函数。我们已经看到过两个封装的示例: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

这就是一个(有点粗糙的)乘法表。如果你受不了这种粗糙,就请将列之间空格替换为制表符,看看输出什么。