Przeciążanie funkcji w C ++: wszystko, co musisz wiedzieć



W tym artykule znajdziesz szczegółową i wszechstronną wiedzę na temat przeciążania funkcji w języku C ++ oraz mnóstwo przykładów do zrozumienia.

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 ++

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 ++

types-of-overloading-in-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 javascript
  • Utrzymanie 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:

  1. Wywołując funkcję z jednym argumentem (i automatycznie przyjmie wartość z = 12)
  2. 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.