默认参数

对于带参数列表的函数,必须从右向左添加默认值,也就是说,要为某个参数设置默认值,则必须为它右边
的所有参数提供默认值:
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  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值