Zastępowanie funkcji w C++ [Przeciążanie funkcji a zastępowanie przykładami]

Opublikowany: 2021-05-25

Zastępowanie funkcji w C++ to funkcja, która pozwala nam na użycie funkcji w klasie potomnej, która jest już obecna w jej klasie nadrzędnej. Klasa podrzędna dziedziczy wszystkie składowe danych i funkcje członkowskie obecne w klasie nadrzędnej. Jeśli chcesz nadpisać jakąkolwiek funkcjonalność w klasie potomnej, możesz zaimplementować nadpisywanie funkcji. Nadpisywanie funkcji oznacza tworzenie nowszej wersji funkcji klasy nadrzędnej w klasie podrzędnej.

Spis treści

Funkcje C++

Funkcja C++ to grupa instrukcji, które łączą się w celu wykonania zadania. Każdy program ma przynajmniej funkcję main(), a niektóre programy mogą mieć dodatkowe funkcje.

Deklaracja funkcji przekazuje kompilatorowi nazwę funkcji, parametry i typ zwracany. Definicja funkcji określa treść funkcji. Biblioteka standardowa C++ składa się z wielu wbudowanych funkcji, które program może wywołać. Funkcja może być metodą, procedurą lub podprogramem.

Definiowanie funkcji

Ogólna składnia funkcji C++ to:

return_type nazwa_funkcji (lista parametrów) {

ciało funkcyjne

}

Każda funkcja C++ składa się z nagłówka funkcji i treści. Składnikami funkcji C++ są:

Typ zwracany — typ zwracany reprezentuje typ wartości zwracanej przez funkcję.

Nazwa funkcji — oznacza nazwę funkcji. Nazwa funkcji wraz z listą parametrów tworzą sygnaturę funkcji.

Parametry — parametr jest symbolem zastępczym wartości zwracanej przez funkcję. Kiedy funkcja jest wywoływana, wartość jest przekazywana do parametru, który nazywa się aktualnym parametrem.

Ciało funkcji — treść funkcji stanowi listę instrukcji, które definiują, co funkcja zrobi.

Wywołanie funkcji

Aby użyć funkcji w C++, musisz wywołać lub wywołać funkcję. Sterowanie jest przekazywane do funkcji, funkcja następnie wykonuje żądane zadanie, a instrukcja return zwraca sterowanie z powrotem do programu głównego.

Aby wywołać funkcję, musisz przekazać wymagane parametry, w tym nazwę funkcji. Jeśli funkcja zwraca wartość, można ją zapisać. Istnieje kilka sposobów przekazywania argumentów do funkcji podczas jej wywoływania. Typy połączeń to Call by Value, Call by Reference i Call by Pointer.

Zastępowanie funkcji w C++

Gdy klasa pochodna lub klasa podrzędna definiuje funkcję, która jest już zdefiniowana w klasie bazowej lub klasie nadrzędnej, jest nazywana zastępowaniem funkcji w języku C++. Nadpisywanie funkcji pomaga nam osiągnąć polimorfizm środowiska wykonawczego. Umożliwia programistom wykonanie określonej implementacji funkcji już używanej w klasie bazowej.

Przykład:

Źródło

Przestudiuj przykład podany powyżej. Tutaj klasą nadrzędną jest „Podstawa”, a klasą potomną „Pochodna”.

Wynikiem powyższego programu będzie:

Funkcja pochodna

Funkcja print() jest zadeklarowana zarówno w klasie podstawowej, jak i pochodnej. Kiedy wywołujemy funkcję print() poprzez obiekt klasy pochodnej „derived1”, funkcja print() z klasy pochodnej jest wywoływana i wykonywana przez zastąpienie tej samej funkcji klasy bazowej.

Działanie zasady nadrzędnej funkcji

Źródło

Jak widać na powyższym obrazku, funkcja klasy bazowej została przesłonięta, ponieważ wywołaliśmy tę samą funkcję poprzez obiekt klasy pochodnej.

Jeśli wywołamy funkcję print() poprzez obiekt klasy Base, funkcja nie zostanie nadpisana. Na przykład:

//Wywołaj funkcję klasy Base

Baza podstawa1;

baza1.print(); // Wyjście: funkcja podstawowa

Wynikiem powyższego kodu będzie:

Funkcja podstawowa

Jak uzyskać dostęp do przesłoniętych funkcji w C++?

Musisz użyć operatora rozpoznawania zakresu „::”, aby uzyskać dostęp do zastąpionej funkcji. Innym sposobem uzyskania dostępu do zastąpionej funkcji jest użycie wskaźnika klasy bazowej w celu wskazania obiektu klasy pochodnej i wywołanie funkcji za pomocą wskaźnika.

Przykład:

Źródło

Wynikiem powyższego programu będzie:

Funkcja pochodna

Funkcja podstawowa

Działanie funkcji Dostęp nadpisanej funkcji

Źródło

W tym przypadku instrukcja pochodna 1.print() uzyskuje dostęp do funkcji print() klasy pochodnej, a instrukcja pochodna2.Base::print() uzyskuje dostęp do funkcji print() klasy Base.

Wywołanie funkcji nadpisanej w C++ z klasy pochodnej

W tym kodzie wywołujemy funkcję overrided z poziomu samej klasy Derived.

Działanie nadpisanego wywołania funkcji z klasy Derived

Źródło

Polecenie Base::print() wywołuje przesłoniętą funkcję z wnętrza klasy Derived.

Ucz się kursów inżynierii oprogramowania online z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.

Przeciążanie funkcji a nadpisywanie funkcji

Przeciążanie funkcji jest osiągane w czasie kompilacji i można to zrobić w klasie bazowej i klasie pochodnej. Pomaga dostarczyć wiele definicji funkcji, zmieniając sygnaturę funkcji, taką jak typ danych parametrów lub typy zwracane.

Nadpisywanie funkcji odbywa się w czasie wykonywania. W zastępowaniu klasa bazowa jest ponownie definiowana w klasie pochodnej z tym samym zwracanym typem i parametrami. Inne różnice między nadpisywaniem funkcji a przeciążaniem funkcji w C++ to:

1. Dziedziczenie

Przesłanianie funkcji może być używane tylko z dziedziczeniem klas, podczas gdy przeciążanie funkcji nie wymaga dziedziczenia klas.

2. Podpis funkcji

Przeciążone funkcje różnią się podpisem pod względem liczby parametrów lub rodzaju parametrów. W zastępowaniu funkcji sygnatury funkcji pozostają takie same.

3. Zakres funkcji

Zastąpione funkcje różnią się zakresem, podczas gdy funkcje przeciążone mają ten sam zakres.

4. Zachowanie funkcji

Zastępowanie funkcji jest niezbędne, gdy funkcja klasy pochodnej musi działać inaczej lub z dodatkową funkcjonalnością niż funkcja klasy bazowej. Przeciążanie funkcji jest implementowane, gdy funkcje o tej samej nazwie muszą mieć różne zachowania w zależności od przekazanych im parametrów.

Jeśli chcesz dowiedzieć się więcej o tworzeniu oprogramowania z pełnym pakietem, zapoznaj się z programem Executive PG UpGrad i IIIT-B w zakresie tworzenia oprogramowania z pełnym pakietem, który jest przeznaczony dla pracujących profesjonalistów i oferuje ponad 500 godzin rygorystycznych szkoleń, ponad 9 projektów, i zadania, status absolwentów IIIT-B, praktyczne praktyczne projekty zwieńczenia i pomoc w pracy z najlepszymi firmami.

Co to jest nadpisywanie funkcji?

Przesłanianie funkcji to koncepcja w programowaniu obiektowym, która umożliwia funkcji w klasie pochodnej przesłonięcie funkcji w jej klasie bazowej, ale z inną sygnaturą (i zwykle z inną implementacją). Kluczowym aspektem jest to, że klasa pochodna nie może „cofnąć” zmian w klasie bazowej, a przynajmniej nie jest to możliwe bez dalszej edycji klasy bazowej. Typowym zastosowaniem zastępowania funkcji jest zapewnienie domyślnej implementacji w klasie bazowej, a następnie zastąpienie określonej implementacją w klasie pochodnej.

Jakie są różnice między nadpisywaniem a przeciążaniem funkcji?

Zastępowanie funkcji występuje, gdy tworzysz funkcję o tej samej nazwie, co funkcja, która już istnieje w klasie bazowej. Gdy tak się stanie, nowa funkcja zastąpi istniejącą funkcję i może być używana zamiast funkcji oryginalnej. Przeciążenie występuje, gdy tworzysz funkcje o tej samej nazwie, ale z różnymi parametrami. Gdy tak się stanie, nowa funkcja zostanie wywołana dodatkowo do funkcji oryginalnej, a obie funkcje mogą być bez problemu użyte w dowolnym kontekście.

Co to jest dziedziczenie w C++?