Faire le prototype de la surcharge de fonction c++

0

La question

Je veux faire une surcharge de fonction avec un prototype en 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;
}

Je suis d'erreur à

int rectangle(int p, int l);

est-ce possible de faire un prototype avec une surcharge de fonction? si possible comment le faire

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

La meilleure réponse

1

Vous avez à déclarer la fonction avant de l'utiliser/l'appeler. Vous n'avez déclarer l'argument 2 version de rectangle fonction, mais vous semblez oublier de déclarer le 1er argument de la prise de version.

Comme indiqué ci-dessous si vous ajoutez la déclaration de l'1 argument de la version de votre programme fonctionne(compile).

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

La sortie du programme peut être vu ici.

Solution Alternative:

Si vous ne voulez pas de déclarer chaque fonction séparément, vous devez simplement définir avant d'principal au lieu de le déclarer comme indiqué ci-dessous.

#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

"Vous avez à déclarer la fonction avant de l'utiliser/l'appeler." - sinon, il suffit de définir la fonction avant de l'utilisé sans une déclaration séparée. Pour fichier unique des programmes, de l'avant-déclaration n'est nécessaire que lorsqu'il y a une dépendance mutuelle.
Dai

j'ai donc besoin du même nombre de prototypes en cas de surcharge de fonction?
Hanif Ramadhani

@HanifRamadhani ou de le mettre à toutes vos fonctions avant principal. L'utilisation de l'avant de la déclaration, à moins que vous vraiment besoin.
Louis Go

@HanifRamadhani Si vous ne voulez pas de déclarer chaque fonction séparément, alors vous pouvez simplement définir avant d'principal que j'ai fait dans ma solution alternative. Découvrez la solution alternative que j'ai ajouté dans ma réponse.
Anoop Rana

@HanifRamadhani Votre êtes les bienvenus. Pouvez-vous marquer ma réponse comme correcte si cela vous a aidé.
Anoop Rana

Je dirais même ordre inverse de la surcharge et de l'appel rectangle(p, p) à partir de rectangle(int p).
Jarod42

@Jarod42 Oui c'est possible, mais je me demande si c'est une bonne idée dans ce cas. Dans ce cas simple, il n'est pas nécessaire d'appeler une autre fonction, car on peut obtenir exactement le résultat direct de la rédaction return p*p au lieu d'augmenter le temps système de l'appel par appel d'une autre fonction.
Anoop Rana

Il enlève le "dédoublement" de la logique. Les chances sont le code inline par le compilateur de toute façon.
Jarod42

Dans d'autres langues

Cette page est dans d'autres langues

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