C++ to elastyczny język programowania ogólnego przeznaczenia. Ten język programowania został pierwotnie stworzony przez duńskiego informatyka Bjarne Stroustrupa w 1985 roku. C++ obsługuje polimorfizm, dziedziczenie i nie tylko. W tym artykule omówiono przeciążanie funkcji w celu uzyskania polimorfizmu w czasie kompilacji w języku programowania C++.
Co to jest funkcja?
Funkcja to nic innego jak określony fragment kodu, który wykonuje określone zadanie na podstawie dostarczonych danych wejściowych i zwraca użytkownikowi żądane wyniki w postaci danych wyjściowych. Funkcje służą do eliminacji powtarzającego się kodu w dużych bazach kodu.
Po zdefiniowaniu funkcji możesz użyć jej ponownie w późniejszym czasie, w tym samym lub innym programie.
Składnia funkcji
Funkcja w C++ ma następującą składnię:
returnType nazwa funkcji (lista_parametrów)…
…
zwróć wartość_zwrotu;
ReturnType, parameter_list i return są opcjonalne. Funkcja w C++ może zwrócić maksymalnie jedną wartość. Jeśli funkcja nie zwraca żadnej wartości, returnType należy zdefiniować jako void.
Co to jest przeciążanie funkcji??
W C++ wiele definicji funkcji może mieć tę samą nazwę funkcji, ale z różnymi parametrami. Nazywa się to przeciążaniem funkcji. Za pomocą funkcji przeciążania funkcji można uzyskać polimorfizm w czasie kompilacji w C++.
Funkcje można przeciążać w następujący sposób:
- Liczba parametrów może być różna
- Typ danych parametrów może być inny
- Kolejność parametrów może być inna
Jednak zwracana wartość nie jest brana pod uwagę przy przeciążaniu funkcji.
Następujące funkcje są przeciążone:
- int dodawanie (int a, int b)
- dodatek pływaka (float f, gloat g)
- dodawanie zmiennoprzecinkowe (liczba f, int i)
- dodawanie zmiennoprzecinkowe (int i, zmiennoprzecinkowe f)
- int dodawanie (int a, int b, int c)
- dodawanie pływaka (float f, float g, float h)
Jak widać, za pomocą funkcji przeciążania funkcji w C++ może istnieć wiele definicji/funkcjonalności o tej samej nazwie funkcji i w tym samym zakresie.
Bez funkcji przeciążania funkcji musiałbyś napisać osobną funkcję [na przykład add_1(), add_2() itd.] dla każdej odmiany. Na przykład może być konieczne napisanie add_1(), aby dodać dwie liczby całkowite, add_2(), aby dodać dwie liczby zmiennoprzecinkowe i tak dalej. Jednak, jak widać powyżej, funkcja przeciążania funkcji może być używana do definiowania wielu odmian funkcji „addition()” przy zachowaniu tej samej nazwy funkcji.
Następujące funkcje nie są uważane za przeciążone, ponieważ jedyną różnicą między nimi jest typ zwracany (typ powrotu nie jest brany pod uwagę przy przeciążaniu funkcji w C++):
- int dodawanie (int a, int b)
- dodawanie zmiennoprzecinkowe (int a, int b)
Przykłady
Teraz, gdy rozumiesz pojęcie przeciążania funkcji, przejdziemy przez kilka działających przykładowych programów, aby lepiej zrozumieć tę koncepcję. Omówimy następujące przykłady:
- Przykład 1: Prosta funkcja
- Przykład 2: Prosta funkcja dodawania
- Przykład 3: Przeciążenie funkcji (1)
- Przykład 4: Przeciążenie funkcji (2)
- Przykład 5: Przeciążenie funkcji (3)
Pierwsze dwa przykłady wyjaśniają, jak działają normalne funkcje w C++, podczas gdy ostatnie trzy przykłady demonstrują funkcję przeciążania funkcji w C++.
Przykład 1: Prosta funkcja
W tym przykładzie pokażemy, jak można zdefiniować i wywołać prostą funkcję w C++. Zdefiniujemy klasę o nazwie „Display” i funkcję publiczną o nazwie „display().” Z funkcji „main()” wywołamy funkcję „display()” za pomocą obiektu klasy „Display” (d).
#zawieraćprzy użyciu standardowej przestrzeni nazw;
klasa Wyświetlacz
publiczny:
nieważne wyświetlanie()
Cout << "Hello World!" << endl;
;
int main()
Wyświetlacz d;
re.pokaz();
zwróć 0;
Przykład 2: Prosta funkcja dodawania
W tym przykładzie pokażemy, jak zdefiniować prostą funkcję „addition()” w C++. Zdefiniujemy klasę o nazwie „DemoAdd” i funkcję publiczną o nazwie „addition().” Z funkcji „main()” wywołamy funkcję „addition()” za pomocą obiektu klasy „DemoAdd” (d).
W tym przykładzie bieżąca implementacja funkcji „addition()” akceptuje tylko dwa parametry całkowite. Oznacza to, że bieżąca funkcja „addition()” może dodać tylko dwie liczby całkowite.
Aby dodać trzy liczby całkowite zamiast dwóch, można zdefiniować funkcję o innej nazwie, np. „addition_1()”. W C++ funkcja może być przeciążona, co oznacza, że można zdefiniować inną definicję funkcji „addition()”, aby dodać trzy liczby całkowite i zachować tę samą nazwę,.mi., "dodanie().” W następnym przykładzie przyjrzymy się, jak przeciążyć funkcję „addition()”.
#zawieraćprzy użyciu standardowej przestrzeni nazw;
klasa DemoDodaj
publiczny:
int dodawanie(int a, int b)
int wynik;
wynik = a + b;
zwróć wynik;
;
int main()
DemoDodaj d;
int i1 = 10, i2 = 20, res;
res = d.dodatek (i1, i2);
Cout << "Result = " << res << endl;
zwróć 0;
Przykład 3: Przeciążenie funkcji (1)
W poprzednim przykładzie zdefiniowaliśmy funkcję „addition()”, aby dodać dwie liczby całkowite i zwrócić obliczony wynik. Teraz w tym przykładzie przeciążymy funkcję „addition()”, aby dodać trzy liczby całkowite. Tak więc będziemy mogli wywołać funkcję „addition()” z dwoma argumentami całkowitymi, a także trzema argumentami całkowitymi.
Bez funkcji przeciążania funkcji musielibyśmy napisać inną funkcję o innej nazwie.
#zawieraćprzy użyciu standardowej przestrzeni nazw;
klasa DemoDodaj
publiczny:
// Pierwsza definicja funkcji add()
int dodawanie(int a, int b)
int wynik;
wynik = a + b;
zwróć wynik;
// Przeciążona wersja funkcji add()
int dodawanie(int a, int b, int c)
int wynik;
wynik = a + b + c;
zwróć wynik;
;
int main()
DemoDodaj d;
int i1 = 10, i2 = 20, i3 = 30, res1, res2;
res1 = d.dodatek (i1, i2); // add() z 2 parametrami
res2 = d.addycja (i1, i2, i3); // add() z 3 parametrami
Cout << "Result = " << res1 << endl;
Cout << "Result = " << res2 << endl;
zwróć 0;
Przykład 4: Przeciążenie funkcji (2)
We wcześniejszych częściach tego artykułu dowiedziałeś się, że przeciążanie funkcji może być wykonywane na podstawie różnic w typach parametrów. Tutaj przeciążyliśmy funkcję „addition()” na podstawie typu danych parametru parameter. W pierwszej wersji funkcji dodawania dodamy dwie zmienne typu integer; a w drugiej wersji dodamy dwie zmienne typu float.
#zawieraćprzy użyciu standardowej przestrzeni nazw;
klasa DemoDodaj
publiczny:
// Pierwsza definicja dodawania()
int dodawanie(int a, int b)
int wynik;
wynik = a + b;
zwróć wynik;
// Przeciążona definicja funkcji
dodawanie pływaka (pływak f, pływak g)
wynik zmiennoprzecinkowy;
wynik = f + g;
zwróć wynik;
;
int main()
DemoDodaj d;
int i1 = 10, i2 = 20, res1;
pływak f1 = 10.5, f2 = 20.7, res2;
res1 = d.dodatek (i1, i2); // dodawanie(int a, int b) zostanie nazwane
res2 = d.dodawanie (f1, f2); // dodawanie(liczba f, płaskie g) zostanie nazwane
Cout << "Result = " << res1 << endl;
Cout << "Result = " << res2 << endl;
zwróć 0;
Przykład 5: Przeciążenie funkcji (3)
W tym przykładzie funkcja „addition()” jest przeciążona na podstawie różnic w kolejności na liście parametrów. To kolejny sposób na przeciążenie funkcji w C++.
#zawieraćprzy użyciu standardowej przestrzeni nazw;
klasa DemoDodaj
publiczny:
// Pierwsza definicja funkcji add()
dodawanie zmiennoprzecinkowe (int a, zmiennoprzecinkowe b)
wynik zmiennoprzecinkowy;
wynik = (zmiennoprzecinkowa)a + b;
zwróć wynik;
// Przeciążona definicja funkcji add()
dodawanie zmiennoprzecinkowe(liczba a, int b)
wynik zmiennoprzecinkowy;
wynik = a + (zmiennoprzecinkowa)b;
zwróć wynik;
;
int main()
DemoDodaj d;
int i1 = 10;
pływak f1 = 10.5, res1, res2;
res1 = d.dodawanie (i1, f1); // dodawanie(int a, float b) zostanie wywołane
res2 = d.dodawanie(f1, i1); // dodawanie(float a, int b) zostanie nazwane
Cout << "Result = " << res1 << endl;
Cout << "Result = " << res2 << endl;
zwróć 0;
Wniosek
C++ to uniwersalny i elastyczny język programowania, który jest szeroko stosowany w różnych dziedzinach. Ten język programowania obsługuje polimorfizm zarówno w czasie kompilacji, jak i w czasie wykonywania. W tym artykule dowiedziałeś się, jak osiągnąć polimorfizm w czasie kompilacji w C++ za pomocą funkcji przeciążania funkcji. Jest to bardzo przydatna funkcja w C++, która pomaga programistom pisać czytelny kod. Może być również pomocny przy pisaniu kodu wielokrotnego użytku.