C ++ jest jednym z tych języków programowania, który jest bardzo elastyczny i obejmuje również kilka funkcji programowania obiektowego. Przeciążanie to kolejna cecha tego języka programowania.Poniższe wskaźniki zostaną omówione w artykule „Przeciążanie funkcji w C ++”:
- Przeciążanie C ++
- Rodzaje przeciążeń w C ++
- Co to jest przeciążanie funkcji w C ++
- Zmieniając liczbę argumentów
- Mając różne typy argumentów
- Zalety przeciążania funkcji w C ++
- Wady przeciążania funkcji w C ++
- Przeciążanie funkcji i niejednoznaczność
Przeciążanie C ++
Kiedy tworzymy dwa lub więcej członków klasy o tej samej nazwie, ale różniącej się liczbą lub typem parametrów, jest to znane jako przeciążenie C ++. W C ++ możemy przeciążać:
- metody,
- konstruktorzy i
- indeksowane właściwości
Rodzaje przeciążeń w C ++
Co to jest przeciążanie funkcji w C ++?
Przeciążanie funkcji w C ++ można zdefiniować jako proces posiadania dwóch lub więcej funkcji składowych klasy o tej samej nazwie, ale różniących się parametrami. W przypadku przeciążania funkcji funkcja może zostać ponownie zdefiniowana przy użyciu różnych typów argumentów lub innej liczby argumentów zgodnie z wymaganiami. Tylko dzięki tym różnicom kompilator może rozróżnić dwie przeciążone funkcje.
implementacja połączonej listy w c
Jedną z głównych zalet przeciążania funkcji jest to, że zwiększa czytelność programu, ponieważ nie musimy wielokrotnie używać różnych nazw dla tej samej akcji.
Zmieniając liczbę argumentów
W ten sposób przeciążamy funkcję, definiujemy dwie funkcje o tych samych nazwach, ale różnej liczbie parametrów tego samego typu. Na przykład we wspomnianym poniżej programie utworzyliśmy dwie funkcje add () zwracające sumę dwóch i trzech liczb całkowitych.
// pierwsza definicja funkcji int add (int a, int b) {cout<< a+b } // second overloaded function definition int add(int a, int b, int c) { cout << a+b+c }
Tutaj mówi się, że funkcja add () jest przeciążona, ponieważ ma dwie definicje, jedną, która przyjmuje dwa argumenty, a drugą, która przyjmuje trzy argumenty. To, która funkcja add () zostanie wywołana, zależy od liczby argumentów.
int main () {add (10, 20) // add () z 2 parametrami zostanie wywołane add (10, 20, 30) // zostanie wywołana sum () z 3 parametrami}
#include using namespace std int add (int a, int b) {cout<< a+b <W powyższym przykładzie przeciążamy funkcję add () zmieniając jej liczbę argumentów. Najpierw definiujemy funkcję add () z dwoma parametrami, a następnie przeciążamy ją, ponownie definiując funkcję add (), ale tym razem z trzema parametrami.
Mając różne typy argumentów
W tej metodzie definiujemy dwie lub więcej funkcji o tej samej nazwie i tej samej liczbie parametrów, ale typ danych używany dla tych parametrów jest inny. Na przykład w tym programie mamy trzy funkcje add (), pierwsza pobiera dwa argumenty całkowite, druga dwa argumenty zmiennoprzecinkowe, a trzecia dwa podwójne argumenty.
#include using namespace std int add (int x, int y) // first definition {cout<< x+y << endl return 0 } float add(float a, float b) { cout << a+b << endl return 0 } double add(double x, double y) { cout << x+y << endl return 0 } int main() { add(20, 40) add(23.45f, 34.5f) add(40.24, 20.433) }W powyższym przykładzie trzykrotnie definiujemy funkcję add (). Najpierw używa się liczb całkowitych jako parametrów, po drugie używa float jako parametrów, a po trzecie używa double jako parametru.
W ten sposób dwukrotnie nadpisujemy funkcję add ().Zalety przeciążania funkcji w C ++
Używamy przeciążania funkcji, aby zaoszczędzić miejsce w pamięci, spójność i czytelność naszego programu.
Dzięki koncepcji przeciążania funkcji use możemy opracować więcej niż jedną funkcję o tej samej nazwie
Przeciążenie funkcji pokazuje zachowanie polimorfizmu, które pozwala nam uzyskać inne zachowanie, chociaż będzie istniał link używający tej samej nazwy funkcji.
Przeciążanie funkcji przyspiesza wykonanie programu.
Przeciążanie funkcji służy do ponownego wykorzystania kodu, a także do oszczędzania pamięci.
Pomaga aplikacji załadować metodę klasy na podstawie typu parametru.
jak znaleźć długość tablicy w javascriptUtrzymanie kodu jest łatwe.
Wady przeciążania funkcji w C ++
- Deklaracje funkcji, które różnią się tylko zwracanym typem, nie mogą być przeciążane przez proces przeciążania funkcji.
- Deklaracje funkcji składowej z tymi samymi parametrami lub tymi samymi typami nazw nie mogą zostać przeciążone, jeśli którykolwiek z nich jest zadeklarowany jako statyczna funkcja składowa.
class XYZ {static void func () void func () // błąd}Przeciążanie funkcji i niejednoznaczność
Gdy kompilator nie jest w stanie zdecydować, którą funkcję powinien wywołać jako pierwszą spośród przeciążonych funkcji, ta sytuacja jest nazywana niejednoznacznością przeciążania funkcji. Kompilator nie uruchamia programu, jeśli pokazuje błąd niejednoznaczności. Przyczyny niejednoznaczności przeciążania funkcji:
- Konwersja typów.
- Funkcja z domyślnymi argumentami.
- Funkcja z przejściem przez referencję
Konwersja typu:
#include using namespace std void function (float) void function (int) void function (float x) {std :: cout<< 'Value of x is : ' <Powyższy przykład generuje błąd - „wywołanie przeciążonej funkcji (double) jest niejednoznaczne”. Funkcja (3.4) wywoła pierwszą funkcję. Funkcja (34) wywołuje drugą funkcję zgodnie z naszymi przewidywaniami. Ale tak się nie dzieje, ponieważ w C ++ wszystkie stałe zmiennoprzecinkowe są traktowane jako podwójne, a nie zmiennoprzecinkowe. Jeśli zamienimy zmienną typu float na podwójną zmienną, program będzie działał dobrze. Dlatego nazywamy to błędem konwersji typu z float na double.
Funkcja z domyślnymi argumentami:
#include using namespace std void function (int) void function (int, int) void function (int x) {std :: cout<< 'Value of x is : ' <W powyższym przykładzie pojawia się błąd informujący, że „wywołanie przeciążonej funkcji„ fun (int) ”jest niejednoznaczne”, ponieważ funkcję (int y, int z = 12) można wywołać na dwa sposoby:
- Wywołując funkcję z jednym argumentem (i automatycznie przyjmie wartość z = 12)
- Wywołując funkcję z dwoma argumentami.
Kiedy wywołujemy funkcję: function (12), w pełni wypełniamy warunek zarówno function (int), jak i function (int, int), więc kompilator wpada w niejednoznaczność i pokazuje błąd.
Funkcja z przekazywaniem przez odniesienie
jak korzystać z pliku w java#include using namespace std void function (int) void function (int &) void function (int a) {std :: cout<< 'Value of a is : ' <Powyższy program wyświetla błąd mówiąc, że „wywołanie przeciążonego programu„ zabawa (int &) ”jest niejednoznaczne”. Jak widać, pierwsza funkcja przyjmuje jeden argument będący liczbą całkowitą, a druga funkcja przyjmuje parametr odniesienia jako argument. W tym przypadku kompilator nie jest w stanie zrozumieć, która funkcja jest potrzebna użytkownikowi, ponieważ nie ma różnicy składniowej między fun (int) a fun (int &), więc wyświetla błąd niejednoznaczności.
Dzięki temu dochodzimy do końca przeciążania funkcji w C ++. Jeśli chcesz dowiedzieć się więcej, zapoznaj się z autorstwa Edureka, zaufanej firmy zajmującej się edukacją online. Szkolenie i certyfikacja J2EE i SOA firmy Edureka ma na celu przeszkolenie zarówno podstawowych, jak i zaawansowanych koncepcji języka Java, a także różnych struktur Java, takich jak Hibernate i Spring.
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy na tym blogu, a my skontaktujemy się z Tobą tak szybko, jak to możliwe.