codecamp

C++ 封装和泛化

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

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

C++ 二维表
C++ 函数
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }