Udělat prototyp přetížení funkce c++

0

Otázka

Chci, aby se přetížení funkce s prototypem v 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;
}

Mám chyba na

int rectangle(int p, int l);

je to možné, aby prototyp s přetížení funkce? pokud je to možné, jak na to

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

Nejlepší odpověď

1

Musíte deklarovat funkce než začnete používat/call. Jste deklarovat argument 2 verze rectangle funkce, ale zdá se, že zapomínáš vyhlásit 1 argument, přičemž verze.

Jak je uvedeno níže, pokud přidáte prohlášení pro 1 argument verzi, pak váš program funguje(zkompiluje).

#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;
}

Výstup z programu může být viděn zde.

Alternativní řešení:

Pokud nechcete deklarovat každou funkci zvlášť, pak byste měli jen definovat, je před hlavní místo, kterým je, jak je znázorněno níže.

#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

"Vy jste deklarovat funkce než začnete používat/call." - alternativně, stačí definovat funkci, než je použijí, aniž samostatné prohlášení. Pro single-soubor programů, dopředu-prohlášení je potřeba pouze tehdy, pokud existuje vzájemná závislost.
Dai

takže já potřebovat stejný počet prototypů jako přetížení funkce?
Hanif Ramadhani

@HanifRamadhani, nebo dát všechny své funkce, než hlavní. Použití vpřed prohlášení, pokud jej opravdu potřebujete.
Louis Go

@HanifRamadhani Pokud nechcete deklarovat každou funkci zvlášť, pak stačí definovat, je před hlavní, jak jsem udělal v mé alternativní řešení. Podívejte se na alternativní řešení , které jsem přidal na mou odpověď.
Anoop Rana

@HanifRamadhani Vaše zač. Můžete označit svou odpověď jako správnou, jestli to pomohlo.
Anoop Rana

Dokonce bych obráceném pořadí proti přetížení a volání rectangle(p, p) z rectangle(int p).
Jarod42

@Jarod42 Ano, to je možné, ale zajímalo by mě, jestli je to dobrý nápad v tomto případě. V tomto jednoduchém případě není třeba volat další funkce, protože můžeme jen získat výsledek, tím, že se přímo píše return p*p místo toho, aby zvýšení zavolat režijní tím, že volá další funkce.
Anoop Rana

To odstraňuje "zdvojení" logika. Šance jsou kód by být inlined tím, že kompilátor stejně.
Jarod42

V jiných jazycích

Tato stránka je v jiných jazycích

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