默认参数指的是当函数调用中省略了实参时,自动使用的一个值
例如,如果将函数 void wow(int n) 设置成 n 默认值为1,则调用函数 wow ( ) 相当于 wow(1)
1.如何设置默认值?必须通过函数原型。例如,函数 left ( ) 的原型如下,此函数输入一个字符串,并返回字符串的前 n 个字符:
char* left( const char* str ,int n=1);
由于该函数返回一个新的字符串,所以其返回值类型为 char* ;希望输入一个字符串而不希望改变它,所以使用 const 限定符;同时,希望函数默认返回第一个字符,所以将默认值设置为1,即省略n这个参数时,它的值是1,否则传递的 n 值会将1覆盖;
2.对于带参数列表的函数,设置默认值时,必须从右到左添加默认值,也就是说,要为某一个参数设置默认值,必须为它右边的所有参数提供默认值。 例如:
int harpo(int i=1, int m=2, int j=3); // valid
int harpo(int i=1, int m, int j); // invalid
harpo原型允许调用该函数时提供 0个,1个,2个或3个 参数;
3.实参按照从左到右的顺序被赋给形参,而不能跳过任何参数。
例如
b=harpo(1, ,3); // invalid
4.注意:只有原型指定了默认值,函数定义部分与没有默认参数时完全相同。
下面栗子意思是,编写一个函数实现功能:打印指定字符串的前 n 个字符。
#include <iostream>
#include <cstring>
const int Max=20;
using namespace std;
char* left(const char* str ,int n=1);
int main()
{
char str[Max];
cout<<"输入指定字符串:\n";
cin.getline(str,Max);
cout<<"输出指定字符:\n";
char* result=left(str,4);
cout<<result<<endl;
delete [] result;
return 0;
}
char* left(const char* str ,int n)
{
if (n<0)
{
n=0;
}
int m,i;
//设置字符串长度的方法1
int len=strlen(str);
m=(n<len) ? n:len;
char* pt=new char [m+1];
//设置字符串长度的方法2
/*
for(m=0;m<n && str[m];m++);
char* pt=new char [m+1];
*/
for (i=0;i<m && str;i++)
{
pt[i]=str[i];
}
while (i<=m)
{
pt[i]='\0';
i++;
}
return pt;
}
输入n=1为默认参数时,输出结果:
输入n=0时,输出结果空字符串:
输入n=4,4大于指定字符串的字符数目时,输出结果字符串是其本身:
输入n=2,输出结果字符串是其前2个字符:
此程序值得注意的是:设置字符串的方法:本例中提供了两种方法。