Fare prototipo di sovraccarico funzione c++

0

Domanda

Voglio fare un sovraccarico di una funzione con prototipo in 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;
}

Ho ottenuto l'errore a

int rectangle(int p, int l);

è possibile fare un prototipo con un sovraccarico funzione? se possibile come fare

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

Migliore risposta

1

Hai per dichiarare la funzione prima di utilizzare/chiamata. Si ha dichiarare il 2 argomento versione di rectangle funzione ma sembrano dimenticate di dichiarare il 1 argomento prendendo versione.

Come mostrato di seguito se si aggiunge la dichiarazione per il 1 argomento della versione funziona il tuo programma(da compilare).

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

L'output del programma può essere visto qui.

Soluzione alternativa:

Se non si vuole dichiarare ogni funzione separatamente allora si dovrebbe definire, prima di main invece di dichiarare come illustrato di seguito.

#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

"Hai per dichiarare la funzione prima di utilizzare la chiamata di esso." - in alternativa, definire la funzione prima di utilizzare senza una dichiarazione separata. Per singolo file di programmi, di inoltrare la dichiarazione è necessaria solo quando c'è una reciproca dipendenza.
Dai

quindi ho bisogno lo stesso numero di prototipi sovraccarico funzione?
Hanif Ramadhani

@HanifRamadhani o mettere tutte le funzioni prima del main. Utilizzare avanti dichiarazione a meno che non si ha realmente bisogno.
Louis Go

@HanifRamadhani Se non si vuole dichiarare ogni funzione separatamente, poi si può solo definire prima come ho fatto io, nella mia soluzione alternativa. Check out la soluzione alternativa che ho aggiunto nella mia risposta.
Anoop Rana

@HanifRamadhani Tuo sei il benvenuto. Potete contrassegnare la mia risposta come corretta se non è aiutato.
Anoop Rana

Vorrei anche invertire l'ordine di sovraccarico e di chiamata rectangle(p, p) da rectangle(int p).
Jarod42

@Jarod42 Sì che è possibile, ma mi chiedo se sia una buona idea in questo caso. In questo semplice caso, non c'è bisogno di chiamare un'altra funzione, perché si può solo ottenere il risultato inserendo direttamente return p*p invece di aumentare la chiamata overhead, chiama un'altra funzione.
Anoop Rana

Si rimuove la "duplicazione" della logica. Probabilità sono, il codice dovrebbe essere sostituite dal compilatore.
Jarod42

In altre lingue

Questa pagina è in altre lingue

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