让的原型负载过重功用c++

0

的问题

我想做一个超载功能原型在C++。

#include <iostream>

using namespace std;

int rectangle(int p, int l);

int main() {
    cout << rectangle(3);
    return 0;
}

int rectangle(int p) {
    return p*p;
}

int rectangle(int p, int l) {
    return p*l;
}

我得到了错误

int rectangle(int p, int l);

是,可能使原型的一个重载功能? 如果可能,如何做到这一点

c++ function overloading
2021-11-24 03:34:09
1

最好的答案

1

你已经宣布的功能在你之前使用/叫它。 你有没有宣布的2个参数的版本 rectangle 功能,但你似乎忘记了声明1中的参考虑的版本。

如下图所示,如果你加入该《宣言》为1参数的版本,然后你的节目工作(汇编).

#include <iostream>
using namespace std;

//declare the function before main
int rectangle(int p, int l);
int rectangle(int p);//ADDED THIS DECLARATION
int main() {
    cout << rectangle(3);
    return 0;
}
//define the functions after main
int rectangle(int p) {
    return p*p;
}
int rectangle(int p, int l) {
    return p*l;
}

该程序的输出可以看到 在这里.

备选方案:

如果你不想要宣布每一个功能分开,那么你应该将它们定义之前,主要的而不是宣布它们,如下所示。

#include <iostream>
using namespace std;

//define the functions before main. This way there is no need to write a separate function declaration because all definition are declarations
int rectangle(int p) {
    return p*p;
}
int rectangle(int p, int l) {
    return p*l;
}

int main() {
    cout << rectangle(3);
    return 0;
}

2021-11-24 03:58:54

"你已经宣布的功能在你之前使用/叫它"。 -或者,只是定义的功能之前,它不使用一个独立宣言》。 对于单个文件的程序,前瞻性宣言》只是需要时有一个相互依赖性。
Dai

所以我需要同样数目的原型负载过重的功能?
Hanif Ramadhani

@HanifRamadhani或把所有的功能之前,主要的。 使用前向声明,除非你真的需要它。
Louis Go

@HanifRamadhani如果你不想要宣布每一个功能分开,然后你就可以界定他们之前,主要因为我已经做了我的 替代解决方案. 检查 备选解决方案 ,我已经加入在我的答案。
Anoop Rana

@HanifRamadhani你们的欢迎。 你可以记下我的回答正确,如果它帮助你。
Anoop Rana

我甚至相反的顺序载并呼叫 rectangle(p, p)rectangle(int p).
Jarod42

@Jarod42是的这是可能的,但我想知道如果这是一个很好的想法,在这种情况。 在这个简单的情况下没有需要呼叫另一个功能,因为我们可以得到的结果通过直接写 return p*p 而不是增加呼叫开销通过调的另一个功能。
Anoop Rana

它删除"重复"的逻辑。 机会是代码将通过内联编译器。
Jarod42

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................