W zastępowaniu funkcji klasa potomna redefiniuje funkcję, która jest już zdefiniowana w jej klasie nadrzędnej.
Umożliwia programiście zapewnienie funkcjonalności specyficznej dla klasy pochodnej (nawet jeśli jest ona zdefiniowana w klasie bazowej).
Zobaczymy teraz kilka przykładów i zrozumiemy koncepcję nadpisywania funkcji w C++.
Przykład 1
W poniższym przykładowym kodzie zdefiniowałem dwie klasy – klasę bazową i klasę pochodną. Klasa bazowa ma funkcję składową, tj. disp(). Derived_Class jest dziedziczona z Base_Class. Funkcja disp() jest obecna w Base_Class, a następnie ponownie zdefiniowana w Derived_Class.
W funkcji main() tworzony jest obiekt klasy Derived_Class, czyli d. Następnie wywołujemy funkcję disp() w obiekcie klasy pochodnej, więc funkcja w klasie pochodnej zostanie wywołana. Wersja klasy bazowej jest tutaj ignorowana. Poniżej możesz zobaczyć dane wyjściowe jako – funkcja disp() w klasie pochodnej.
#włączaćprzy użyciu standardowej przestrzeni nazw;
//klasa bazowa
class Base_Class
{
publiczny:
próżniawykorzystać()
{
koszt<< 'funkcja disp() w klasie bazowej.' <<koniec;
}
};
//Klasy pochodnej
klasa Pochodna_Klasa:public Base_Class
{
publiczny:
próżniawykorzystać()
{
koszt<< 'funkcja disp() w klasie pochodnej' <<koniec;
}
};
intGłówny()
{
Pochodna_Klasa d;
D.wykorzystać(); //funkcja disp() na obiekcie klasy pochodnej
powrót 0;
}
Przykład-2
W tym przykładzie zobaczymy, jak celowo wywołać wersję funkcji w klasie bazowej za pośrednictwem obiektu klasy pochodnej. W definicji funkcji klasy pochodnej używamy operatora rozpoznawania zasięgu [::] do wywołania wersji funkcji klasy bazowej.
#włączaćprzy użyciu standardowej przestrzeni nazw;
class Base_Class
{
publiczny:
próżniawykorzystać()
{
koszt<< 'funkcja disp() w klasie bazowej.' <<koniec;
}
};
klasa Pochodna_Klasa:public Base_Class
{
publiczny:
próżniawykorzystać()
{
Base_Class::wykorzystać(); //Wywołaj wersję disp() klasy bazowej
}
};
intGłówny()
{
Pochodna_Klasa d;
D.wykorzystać();
powrót 0;
}
Przykład-3
To kolejny przykład zastępowania funkcji. W tym przykładzie stworzyliśmy klasę nadrzędną – Animal oraz dwie klasy pochodne – Duck i Dog. Klasa bazowa, tj. klasa Animal, ma funkcję członkowską sound().
W klasie pochodnej/klasie potomnej, tj. Dog, przedefiniowaliśmy tę samą funkcję, tj. sound(), aby nadpisać jej definicję klasy bazowej. Podobnie w drugiej klasie pochodnej, tj. Duck, przedefiniowaliśmy tę samą funkcję, tj. sound().
W funkcji main() stworzyliśmy obiekt pies Pies i Kaczka Kaczki. Tak więc teraz, gdy wywołamy funkcję sound() dla psa i kaczki, wywołamy funkcję klasy pochodnej funkcji sound(). Możesz zobaczyć wyjście programu, jak pokazano poniżej. Tak więc za pomocą nadpisywania funkcji możemy wywołać funkcję specyficzną dla klasy pochodnej.
#włączaćprzy użyciu standardowej przestrzeni nazw;
klasa zwierząt
{
publiczny:
próżniadźwięk()
{
koszt<< 'Odgłos zwierząt!' <<koniec;
}
};
//Klasa pochodna – Klasa psa
klasa psa:zwierzę publiczne
{
publiczny:
próżniadźwięk()
{
koszt<< - Dźwięk psa - szczekanie. <<koniec;
}
};
//Klasa pochodna – Klasa kaczki
klasa kaczka:zwierzę publiczne
{
publiczny:
próżniadźwięk()
{
koszt<< — Dźwięk kaczki — kwak. <<koniec;
}
};
intGłówny()
{
Pies pies;
Kaczka kaczka;
pies.dźwięk(); //dźwięk() psa
kaczka.dźwięk(); //sound() kaczki
powrót 0;
}
Wniosek
W tym artykule wyjaśniłem nadpisywanie funkcji w C++ . Język C++ obsługuje polimorfizm środowiska uruchomieniowego. Przesłanianie funkcji pomaga uzyskać polimorfizm w czasie wykonywania w C++. W tym artykule przyjrzano się koncepcji nadpisywania funkcji i sposobom uzyskania polimorfizmu w czasie wykonywania przy użyciu nadpisywania funkcji.