加载中...

6.6 封装和泛化


一般情况下,封装的意思是提取出一段代码,包装在一个函数里,这样使你能够在适合的地方使用此函数。我们已经看到过两个封装的示例:4.3小节的printParity函数和5.8小节的isSingleDigit。

泛化的意思是提取出特例的代码(如打印2的倍数),修改它使之更通用(如打印任意整数的倍数)。

下面的函数封装了前一小节的循环代码,并泛化为打印n的倍数。

  1. void printMultiples (int n)
  2. {
  3. int i = 1;
  4. while (i <= 6) {
  5. cout << n*i << " ";
  6. i = i + 1;
  7. }
  8. cout << endl;
  9. }

封装要做的就是添加第一行代码,声明了函数名、参数和返回值类型。泛化要做的就是用参数n取代原来的2。

如果我们调用此函数时,给参数赋值为2,我们的输出就和之前一样。如果参数值为3,则输出为:

  1. 3 6 9 12 15 18

如果参数值为4,则输出为:

  1. 4 8 12 16 20 24

现在你大概可以猜到我们将怎样取打印乘法表:使用不同的参数值反复调用printMultiples。事实上我们将使用另一个循环来迭代打印各行。

  1. int i = 1;
  2. while (i <= 6) {
  3. printMultiples (i);
  4. i = i + 1;
  5. }

首先要注意这个循环和printMultiples内部那个循环的相似之处。我所做的只是用一句函数调用取代打印语句。

这段程序的输出如下:

  1. 1 2 3 4 5 6
  2. 2 4 6 8 10 12
  3. 3 6 9 12 15 18
  4. 4 8 12 16 20 24
  5. 5 10 15 20 25 30
  6. 6 12 18 24 30 36

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


还没有评论.