【问题标题】:Calling a function with less parameters than needed调用参数少于所需参数的函数
【发布时间】:2015-08-25 05:51:46
【问题描述】:

我想在另一个函数 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);

}

【问题讨论】:

  • 这是什么语言?此外,如果您的语言允许,一个简单的解决方案是重载该方法。
  • 它的 C++ 。我完全不知道重载。它到底是什么以及我们如何做到这一点?
  • 简而言之,您使用相同的函数名称,但参数和返回类型不同。您可以参考 Wikipedia 文章的介绍,然后在其他地方查找更详细的主题:en.wikipedia.org/wiki/Function_overloading
  • K 谢谢。我会尝试这样做,看看它是否有效。
  • 你可以写ABC(s,0,0)

标签: c++ function parameters optional-parameters


【解决方案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 函数,并且您可以使用具有相同函数名称的 3 个参数的另一个版本。这就是函数重载的实际意义。

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 (整数值的最小值 - 在<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
}

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    相关资源
    最近更新 更多