🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
一般情况下,封装的意思是提取出一段代码,包装在一个函数里,这样使你能够在适合的地方使用此函数。我们已经看到过两个封装的示例: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 ~~~ 这就是一个(有点粗糙的)乘法表。如果你受不了这种粗糙,就请将列之间空格替换为制表符,看看输出什么。