Polimorfizm w przykładach C ++

Polimorfizm w przykładach C ++
Polimorfizm, który implikuje „różne formy”, dzieje się, gdy wiele klas jest połączonych przez dziedziczność. W różnych kontekstach ta sama rzecz (metoda lub operator) działa inaczej. Możemy odziedziczyć właściwości i funkcje z innej klasy za pośrednictwem dziedziczności. Polimorfizm wykorzystuje te techniki do różnych celów. To pozwala nam wykonywać określone działanie na różne sposoby. Dlatego w tym artykule omówimy przykłady polimorfizmu w C ++, wykorzystując niektóre przykłady w Ubuntu 20.04. Zaczynamy od tworzenia i uruchamiania nowego pliku C ++ w konsoli terminalowej.
$ Touch Polimorfizm.CC
$ nano polimorfizm.CC

Przykład 01: Przeciążenie funkcji

Gdy ich argumenty są unikalne, możesz użyć dwóch podstawowych funkcji o tym samym tytule w C++. Różne metody są wywoływane na podstawie ilości i rodzaju parametrów, a ta koncepcja jest znana jako przeciążenie funkcji. Rozpoczęliśmy nasz pierwszy przykład od standardowej przestrzeni nazw „STD” i nagłówkiem wejściowego „iostream”. Zdefiniowane są trzy funkcje „VAL” zdefiniowane przez użytkownika, z których każda zawiera pojedynczą instrukcję Cout. Pierwsza funkcja zawiera parametr typu liczb całkowitych, druga zawiera parametr typu podwójnego, a ostatni zawiera dwa parametry podwójnego typu. Pierwsze dwie funkcje „VAL” po prostu otrzymują wartość z metody main () i wyświetla ją na powładzie za pomocą instrukcji Cout. Trzeci zyskuje dwie wartości podwójnego typu z main () i wyświetla sumę obu wartości na powładzie za pomocą klauzuli Cout. Funkcja Main () po prostu wywołuje trzy metody tej samej nazwy po drugiej, przekazując różne wartości.

#włączać
za pomocą przestrzeni nazw Std;
int val (int n1)
Cout <<"Integer: "<< n1 <
Double Val (double n1)
Cout <<"Double: "<< n1 <
Double Val (Double N1, Double N2)
Cout << "Sum: "<< n1+n2<
int main ()
val (10);
Val (9.25);
Val (4.1, 8.23);
powrót 0;

Kompilacja tego kodu C ++ jest skuteczna przy użyciu kompilatora G ++ na powładzie.

$ g ++ polimorfizm.CC

Po wykonaniu kodu mamy wartości wyświetlane na konsoli.

$ ./A.na zewnątrz

Przykład 02: Przeciążenie operatora

Przeciążenie operatora jest podobne do przeciążenia metodami, ponieważ używa tego samego znaku, ale różne operandy dla różnych metod operatora. Rozpoczęliśmy ten przykład, deklarując nową klasę „A” po przestrzeni nazw i bibliotece nagłówka. Klasa A zawiera prywatny element danych typu liczb całkowitych „V” i funkcję konstruktora A () używana do inicjalizacji zmiennej „V” o wartości 5. Oto funkcja operatora, aby zwiększyć wartość „v” o 3. Jak pokazuje jego nazwa, operator „+” został tutaj przeciążony. Funkcja show () jest tutaj, aby pokazać przyrostową wartość zmiennej „v.„Po utworzeniu obiektu konstruktor a () zostanie wykonany. Obiekt został użyty do wywołania funkcji operatora „++”. OBJ jest ponownie wykorzystywany do wywołania funkcji show (), aby wyświetlić wartość przyrostową.

#włączać
za pomocą przestrzeni nazw Std;
klasa A
prywatny:
w telewizji;
publiczny:
A (): v (5)
void operator ++ ()
v = v + 3;

void show ()
Cout << "Value after increment: " << v << endl;

;
int main ()
Obj;
++obj;
obj.pokazywać();
powrót 0;

Po kompilacji nie mamy błędów. Przyrostowa wartość zmiennej „V” została wyświetlona na naszym ekranie terminalu po uruchomieniu tego kodu.

$ g ++ polimorfizm.CC
$ ./A.na zewnątrz

Przykład 03: Zastępowanie funkcji

Klasa podstawowa i jej potomkowe podklasy mogą mieć te same metody nazwy. Kiedy używamy instancji z podklasy, aby wywołać metodę, funkcja rozszerzonej klasy jest uruchomiona, a nie klasa nadrzędna. W rezultacie różne funkcje będą działać w zależności od obiektu wywołującego metodę. W C ++ jest to określane jako zastępowanie metody. Zainicjowaliśmy trzy klasy w kodzie. Klasa A jest klasą rodziców obu klas dziecięcych B i C. Wszystkie klasy mają tę samą funkcję nazwy, „show ()”, wyświetlając swoje specyfikacje za pośrednictwem instrukcji Cout. Metoda main () utworzyła 3 obiekty dla 3 klas, aby wywołać odpowiednie funkcje.

#włączać
za pomocą przestrzeni nazw Std;
klasa A
publiczny:
void show ()
Cout << "Base class A… " << endl;
;
Klasa B: public A
publiczny:
void show ()
Cout << "Derived class B… " << endl;
;
Klasa C: public A
publiczny:
void show ()
Cout << "Derived class C… " << endl;
;
int main ()
O1;
O1.pokazywać();
B o2;
o2.pokazywać();
C o3;
o3.pokazywać();
powrót 0;

Otrzymaliśmy wszystkie metody wykonane ze wszystkich klas po uruchomieniu tego pliku kodu.

Przykład 04: Funkcje wirtualne

Jeśli użyjemy „wskaźnika” klasy podstawowej w odniesieniu do obiektu klasy pochodnej, możemy nawet nie być w stanie obejść metod w C++. W tych okolicznościach zastosowanie metod wirtualnych w klasie nadrzędnej zapewnia, że ​​metodę można zastąpić. Tak więc stworzyliśmy klasę macierzystą A z jej dzieckiem klasy B. Obie klasy mają te same funkcje nazwy, ale funkcja klasy nadrzędnej zawiera słowo kluczowe „wirtualne.”W Main () obiekt klasy B„ B ”został użyty jako odniesienie do obiektu wskaźnika klasy nadrzędnej„ A ”."

#włączać
za pomocą przestrzeni nazw Std;
klasa A
publiczny:
Virtual Void show ()
Cout << "Base class A… " << endl;

;
Klasa B: public A
publiczny:
void show ()
Cout << "Derived class B… " powrót 0;

Po wykonaniu tego kodu metoda klasy pochodnej została wykonana za pomocą wirtualnego słowa kluczowego w funkcji zdefiniowanej przez użytkownika klasy nadrzędnej.

$ g ++ polimorfizm.CC
$ ./A.outg

Wniosek:

Chodziło o użycie polimorfizmu w C ++ przy użyciu niektórych jego podstawowych pojęć. Aby było to płynne, omówiliśmy przeciążenie funkcji, zastępowanie funkcji, przeciążenie operatora i koncepcja funkcji wirtualnej. Mamy nadzieję na najlepszą opinię na temat tej pracy.