c++ 高手请给我讲解一下这段话怎么理解
函数参数的缺省在C++中,函数的参数可以有缺省值。当调用有缺省参数的函数时,如果相应的参数没有给出实参,则自动用相应的缺省参数值作为其实参。函数的缺省参数,是在函数原型中...
函数参数的缺省
在C++中,函数的参数可以有缺省值。当调用有缺省参数的函数时,如果相应的参数没有给出实参,则自动用相应的缺省参数值作为其实参。函数的缺省参数,是在函数原型中给定的。例如:
int sum(int i=-1, int j=-2);
(能不能写个程序来说明一下什么情况下:"函数的参数可以有缺省值。当调用有缺省参数的函数时,如果相应的参数没有给出实参,则自动用相应的缺省参数值作为其实参。") 展开
在C++中,函数的参数可以有缺省值。当调用有缺省参数的函数时,如果相应的参数没有给出实参,则自动用相应的缺省参数值作为其实参。函数的缺省参数,是在函数原型中给定的。例如:
int sum(int i=-1, int j=-2);
(能不能写个程序来说明一下什么情况下:"函数的参数可以有缺省值。当调用有缺省参数的函数时,如果相应的参数没有给出实参,则自动用相应的缺省参数值作为其实参。") 展开
3个回答
展开全部
比如你写一个计算x的y次方的函数,在不指定第二个参数的时候它默认设置为2:
#include <iostream>
using namespace std;
double power(int x, int y = 2) // 默认返回x的平方
{
if(y > 0)
return y > 0 ? x * power(x, y-1) : 1;
else
return 1/(y < 0 ? x * power(x, (-y)-1) : 1);
}
int main()
{
cout << power(2) << endl; // 2的2次幂 4
cout << power(2,3) << endl; // 2的3次幂 8
cout << power(-2,-3) << endl; // 2的-3次幂 -0.125
}
当指定了第二个参数的时候返回的就是x的y次方,否则返回x的2次方。
另外提醒一句如果函数的参数中有默认参数和非默认参数共同存在的话,默认参数一般要写在非默认参数之后。比如上面的例子中如果把power写成:
double power(int y = 2, int x)的话,那么每次调用power时就都必须显式地指定其第一个参数了,这样就失去了设置默认参数的意义。
再有就是当参数列表中有默认参数的函数在重载为参数个数比该重载函数的参数个数小的时候会产生二义性,如:
#include <iostream>
using namespace std;
void power(int x, int y = 2)
{
// some implementation
}
void power(int x) // 重载power
{
// some implementation
}
int main()
{
power(2); // ambiguous call to overloaded function
// 所以在这时就必须指定第二个参数来加以区别:
power(2, 2);
}
#include <iostream>
using namespace std;
double power(int x, int y = 2) // 默认返回x的平方
{
if(y > 0)
return y > 0 ? x * power(x, y-1) : 1;
else
return 1/(y < 0 ? x * power(x, (-y)-1) : 1);
}
int main()
{
cout << power(2) << endl; // 2的2次幂 4
cout << power(2,3) << endl; // 2的3次幂 8
cout << power(-2,-3) << endl; // 2的-3次幂 -0.125
}
当指定了第二个参数的时候返回的就是x的y次方,否则返回x的2次方。
另外提醒一句如果函数的参数中有默认参数和非默认参数共同存在的话,默认参数一般要写在非默认参数之后。比如上面的例子中如果把power写成:
double power(int y = 2, int x)的话,那么每次调用power时就都必须显式地指定其第一个参数了,这样就失去了设置默认参数的意义。
再有就是当参数列表中有默认参数的函数在重载为参数个数比该重载函数的参数个数小的时候会产生二义性,如:
#include <iostream>
using namespace std;
void power(int x, int y = 2)
{
// some implementation
}
void power(int x) // 重载power
{
// some implementation
}
int main()
{
power(2); // ambiguous call to overloaded function
// 所以在这时就必须指定第二个参数来加以区别:
power(2, 2);
}
展开全部
你在函数原型中定义了了两个参数,但是你在函数调用的时候只传递了一个参数,另一个就时以缺省的形式存在的,比如你定义i=1,j=2,在函数调用的时候,你传递一个sun(3)这个时候i=3,j=2。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
void
myputs(char *s = "bad")
{
puts(s);
}
如果你调用myputs("good")则打印good,
如果你调用myputs()则打印bad。
讲清楚了吗?
myputs(char *s = "bad")
{
puts(s);
}
如果你调用myputs("good")则打印good,
如果你调用myputs()则打印bad。
讲清楚了吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询