您的位置:首页 > 其它

默认参数

2016-04-06 20:26 344 查看
对于带参数列表的函数,必须从右向左添加默认值,也就是说,要为某个参数设置默认值,则必须为它右边

的所有参数提供默认值:

int harpo(int n,int m = 4, int j = 5);/// valid

int chico(int n,int m = 6, int j;) ///invalid

int groucho(int k=1,int m=2, int n = 3)///invalid

例如harpo()原型允许调用该函数时提供1个,2个或3个参数:

beeps = harpo(2);///same as harpo(2, 4, 5)

beeps = harpo(1, 8);///same as harpo(1, 8, 5)

beeps = harpo(8, 7, 6);///no default arguments used

实参按从左到右的顺序一次被付给相应的实参,而不能跳过任何参数。

因此

下面的调用不被允许:

beeps = harpo(3, , 8);

注意,只有原型指定了默认值,函数定义与没有默认参数时完全相同。

请看下面的程序:*/

/*

#include <iostream>

using namespace std;

const int ArSize = 80;

char * left (const char * str,int n = 1);

int main()

{

char sample[ArSize];

cout << "Enter a string: \n";

cin.get(sample,ArSize);

char *ps = left(sample, 4);

cout << ps << endl;

delete [] ps;

ps = left(sample);

cout << ps << endl;

delete [] ps;

return 0;

}

char * left(const char * str, int n)

{

if(n < 0)

n = 0;

char * p = new char[n+1];

int i;

for(i=0; i<n&&str[i]; i++)

p[i] = str[i];

while(i <= n)

p[i++] = '\0';

return p;

}

Enter a string:

forthcoming

fort

f

Process returned 0 (0x0) execution time : 8.408 s

Press any key to continue

*/

使用new创建一个新的字符串,以存储被选择的的字符。不合作的用户要求的字符数目可能为负。此情况下,

函数将字符计数设置为0,并返回一个空字符串。另外,不负责任的用户要求的字符数目可能多于字符串包

含的字符数,为预防这种情况,使用组合测试:i < n && str[i]

i<n 让循环复制了n 个字符后终止, 测试的第二部分————表达式str[i],是要复制的字符的编码。

遇到空值字符后,循环将结束。这样,while循环将使字符串以控制字符结束,并将余下的空间设为空值字符。

另一种设置新字符串长度的方法是,将n设置为传递的值和字符串长度中较小的一个。

int len = strlen(str);

n = (n<len)?n:len;

char * p = new char[n+1];

这将确保new分配的空间不会多于存储字符串所需的空间。第二种方法明显不如第一种方法快。

当m的值等于n或到达字符串结尾时,下面的循环都将终止。

int m = 0;

while(m <=n && str[m] != '\0')

m++;

char * p = new char[m+1];

/// use m instead of n in rest of code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: