调用函数时传入的参数少于所需的参数

3
我希望在另一个函数XYZ中调用一个名为ABC的函数,但是另一个函数的参数除了s之外都不可用。我甚至不需要它们。只有s就可以解决我的问题。但是因为我已经声明了带有参数stu的函数,而且我需要这样声明,因为函数ABC需要它们。

现在如何解决这个问题。

bool ABC (int s, float t, int u)
{
     Function Implementation;
}

void XYZ (float a)
{
    Statement 1;
    Statement 2;

    if(ABC(s, t, u))
       Statement 3;

}

void main()
{
 Have parameters s, t, u and a with me.

//Call Function
  XYZ(a);

}

这是什么编程语言?如果您的编程语言允许,一个简单的解决方案是重载该方法。 - shree.pat18
这是C++。我不太清楚重载。它到底是什么,我们该如何实现? - hawkeye
简而言之,您使用相同的函数名称但不同的参数和返回类型。您可以参考维基百科文章进行介绍,然后在其他地方详细了解该主题:http://en.wikipedia.org/wiki/Function_overloading - shree.pat18
好的,我会尝试去做并看看是否有效。 - hawkeye
1
你可以直接写ABC(s,0,0) - M.M
1个回答

1
您已经有了名为 bool ABC (int s, float t, int u) 的函数。如果您声明另一个只有一个参数的名为 ABC 的函数(在您的情况下是参数 s),那么您可以使用这些同名函数中的任何一个:
bool ABC (typename s)  //the return type can be anyithing, not necessarily bool
{
     Another Function Implementation;
}

现在你可以使用带有一个参数的ABC函数,同时还有一个带有三个参数的同名函数版本。这就是函数重载的实际意义。
if(ABC(s)) //ABC(s,t,u) would be working too
       Statement;

请注意,C++语言为您提供了处理可选参数的第二种方式。通过使用特定值初始化最后n个参数,您将能够留下其中一些参数。在这种情况下,在函数的实现中,剩余的参数将被分配初始值:
bool ABC (int s, float t=0, int u=0)
{
     Function Implementation;
}

int main()
{
  //ABC() won`t work
  ABC(2) //s=2; t=0; u=0;
  ABC(2,3) //s=2; t=3; u=0;
  ABC(2,3,4) //s=2; t=3; u=4 
}

请注意,如果您只使用两个参数调用函数,则不能仅设置su。您在函数声明中参数的顺序很重要。

此外,在声明中为参数分配值,这些值不应该以正常方式获取(可以是0、INT_MIN (intiger值的最小值 - 在<climits>中定义)或取决于您的问题的任何其他值),您可以轻松地在实现中检查用于调用函数的参数数量:

#include <climits>
#include <cfloats>

bool ABC (int s, float t=FLT_MAX, int u=INT_MAX)
{
   if(u == INT_MAX){...} //this means that you don`t set u

   if(t == FLT_MAX){...} //this means you set only s
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接