将单个参数传递给多参数函数

时间:2018-02-22 07:24:37

标签: c++

我在给定的函数中有一个变量let say int c。我想把它传递给另一个class.let说它是

function(int a, int b, int c);

我只想传递第三个参数而忽略前两个。

即。 :我只想传递int c,作为function (c),它只是将它传递给第三个参数。我不想像function(0,0,c);那样传递它。有没有可能性。请指教。

4 个答案:

答案 0 :(得分:2)

看起来你想做功能重载。像这样的东西 -

function(int a, int b, int c);

function(int c);

在第二个函数中,您可以使用ab的适当值调用第一个函数

答案 1 :(得分:2)

您可以为您的函数设置默认值:

void function(int c, int a = 0, int b = 0);

或者你可以重载你的功能:

void function(int a, int b, int c) {
    //implementation 1
}

void function(int c) {
    function(0, 0, c);
}

你可以在两种情况下都这样使用它:

function(c);

注意:当我们使用默认值时,在函数定义中,默认值的参数必须是最后一个,例如:

void function(int a = 0, int b = 0, int c)

不是有效的格式。

答案 2 :(得分:0)

当你遇到function(c)相当于function(0, 0, c)的情况时,听起来就像是一个糟糕的设计。通常,您可以对从头开始的参数使用默认参数值。如果function(c)等同于function(c, 0, 0),则有意义。

您可以通过将函数声明为:

来轻松完成此操作
void function(int c, int a = 0, int b = 0);

我意识到您可以通过将function重载为:

来实现目标
void function(int c)
{
   function(0, 0, c);
}

但它对我来说似乎仍然是一个糟糕的界面。

答案 3 :(得分:0)

Imho已经有三个参数值得构建它们

void function(foo f);

允许有更好的功能界面

struct foo {
    int a;
    int b;
    int c;
    foo() : a(0),b(0),c(0) {}
};

foo f;
f.b = 12;
f.c = 32;
function(f);

这有什么用?您可以提供默认构造函数,并让用户只设置那些非默认的字段:

foo

现在可以使用默认/非默认值的任意组合。

有人可能会认为结构不是真正必要的,问题只是转移到$res = mysqli_query($conn,"SELECT * FROM table_name"); while($row = mysqli_fetch_array($res)){ echo '<img src="data:image/jpeg;base64,'.base64_encode($row['al_image']).'" >'; } 的构造函数或正确设置成员的需要,但我认为这是另一种缺少的有效方法答案。 (顺便说一下,我并不是说我的例子在这里表现出最好的实践,但细节对确切的用例很重要)