Stwórz prototyp funkcji przeciążenia c++

0

Pytanie

Chcę stworzyć przeciążenia funkcji z prototypem na 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;
}

Mam błąd w

int rectangle(int p, int l);

czy jest możliwe stworzyć prototyp z funkcją przeciążenia? jeśli to możliwe, jak to zrobić

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

Najlepsza odpowiedź

1

Należy zadeklarować funkcję, przed użyciem/powodować jej. Naprawdę ogłosili wersję z 2 argumentami rectangle funkcja, ale wydaje się, że zapomniał ogłosić wersję z 1 argumentem, która przyjmuje wersję.

Jak pokazano poniżej, jeśli dodasz ogłoszenie dla wersji z 1 argumentem, to twój program nie działa(skompilowany).

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

Wyniki pracy programu można zobaczyć tutaj.

Alternatywne rozwiązanie:

Jeśli nie chcesz ogłaszać każdej funkcji oddzielnie, należy po prostu określić ich przed main, a nie ogłaszać ich, jak pokazano poniżej.

#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

"Należy zadeklarować funkcję przed użyciem/wyzwanie". - Jako alternatywy, po prostu określ funkcję, przed użyciem bez osobnego zawiadomienia. Dla однофайловых programów bezpośrednie ogłoszenie jest konieczne tylko wtedy, gdy istnieje wzajemna zależność.
Dai

to znaczy, że muszę taką samą ilość prototypów, jak i funkcji przeciążenia?
Hanif Ramadhani

@HanifRamadhani lub umieścić wszystkie swoje funkcje przed głównymi. Użyj bezpośrednie ogłoszenie, jeśli naprawdę nie potrzebujesz.
Louis Go

@HanifRamadhani Jeśli nie chcesz ogłaszać każdej funkcji oddzielnie, można po prostu określić ich przed main, jak to zrobiłem w swoim alternatywnym rozwiązaniu. Sprawdź rozwiązanie alternatywne, które dodałem na swoją odpowiedź.
Anoop Rana

@ХанифРамадхани, proszę. Czy można zauważyć moją odpowiedź jako poprawną, jeśli on ci pomógł?
Anoop Rana

Nawet bym zmienił kolejność przeciążenia i zadzwonił rectangle(p, p) Od rectangle(int p).
Jarod42

@Jarod42 Tak, jest to możliwe, ale zastanawiam się, czy to dobry pomysł w tym przypadku. W tym prostym przypadku nie ma potrzeby wywoływać inną funkcję, bo możemy po prostu uzyskać wynik, pisząc bezpośrednio return p*p zamiast tego, aby zwiększyć koszty połączeń, wywołując inną funkcję.
Anoop Rana

To rozwiązuje logiki "powielania". Najprawdopodobniej kod nadal będzie wbudowany kompilator.
Jarod42

W innych językach

Ta strona jest w innych językach

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