Vārds polimorfisms nozīmē, ka tam ir daudz formu. Vienkāršiem vārdiem sakot, mēs varam definēt polimorfismu kā ziņojuma spēju parādīt vairāk nekā vienā formā. Polimorfisma piemērs dzīvē ir persona, kurai vienlaikus var būt dažādas īpašības. Vīrietis vienlaikus ir tēvs, vīrs un darbinieks. Tātad viena un tā pati persona dažādās situācijās uzvedas atšķirīgi. To sauc par polimorfismu. Polimorfisms tiek uzskatīts par vienu no svarīgākajām objektorientētās programmēšanas iezīmēm.
Polimorfisma veidi
- Kompilēšanas laika polimorfisms
- Izpildes laika polimorfisms

Polimorfisma veidi
1. Kompilēšanas laika polimorfisms
Šāda veida polimorfisms tiek panākts ar funkciju pārslodzi vai operatora pārslodzi.
A. Funkciju pārslodze
Ja ir vairākas funkcijas ar vienādu nosaukumu, bet atšķirīgiem parametriem, tad tiek uzskatīts, ka funkcijas ir pārslogots, tāpēc to sauc par funkciju pārslodzi. Funkcijas var pārslogot mainot argumentu skaitu vai/un mainot argumentu veidu . Vienkārši izsakoties, tā ir objektorientētas programmēšanas iezīme, kas nodrošina daudzas funkcijas, kurām ir vienāds nosaukums, bet atšķirīgi parametri, ja zem viena funkcijas nosaukuma ir uzskaitīti daudzi uzdevumi. Ir noteikti funkciju pārslodzes noteikumi, kas jāievēro, pārslogojot funkciju.
Zemāk ir C++ programma, lai parādītu funkciju pārslodzi vai kompilēšanas laika polimorfismu:
C++
// C++ program to demonstrate> // function overloading or> // Compile-time Polymorphism> #include> using> namespace> std;> class> Geeks {> public> :> > // Function with 1 int parameter> > void> func(> int> x)> > {> > cout <<> 'value of x is '> << x << endl;> > }> > // Function with same name but> > // 1 double parameter> > void> func(> double> x)> > {> > cout <<> 'value of x is '> << x << endl;> > }> > // Function with same name and> > // 2 int parameters> > void> func(> int> x,> int> y)> > {> > cout <<> 'value of x and y is '> << x <<> ', '> << y> > << endl;> > }> };> // Driver code> int> main()> {> > Geeks obj1;> > // Function being called depends> > // on the parameters passed> > // func() is called with int value> > obj1.func(7);> > // func() is called with double value> > obj1.func(9.132);> > // func() is called with 2 int values> > obj1.func(85, 64);> > return> 0;> }> |
>
kas ir monitors
>Izvade
value of x is 7 value of x is 9.132 value of x and y is 85, 64>
Paskaidrojums: Iepriekš minētajā piemērā viena funkcija ar nosaukumu funkcija func() darbojas atšķirīgi trīs dažādās situācijās, kas ir polimorfisma īpašība. Lai uzzinātu vairāk par to, varat skatīt rakstu - Funkciju pārslodze programmā C++ .
B. Operatora pārslodze
C++ ir iespēja nodrošināt operatoriem īpašu nozīmi datu tipam, šī iespēja ir pazīstama kā operatora pārslodze. Piemēram, mēs varam izmantot pievienošanas operatoru (+) virkņu klasei, lai savienotu divas virknes. Mēs zinām, ka šī operatora uzdevums ir pievienot divus operandus. Tātad viens operators “+”, kad tas ir novietots starp veseliem skaitļiem, tos pievieno, un, ievietojot starp virknes operandiem, tos savieno.
Zemāk ir C++ programma, lai parādītu operatora pārslodzi:
CPP
drukāšanas paziņojums java
// C++ program to demonstrate> // Operator Overloading or> // Compile-Time Polymorphism> #include> using> namespace> std;> class> Complex {> private> :> > int> real, imag;> public> :> > Complex(> int> r = 0,> int> i = 0)> > {> > real = r;> > imag = i;> > }> > // This is automatically called> > // when '+' is used with between> > // two Complex objects> > Complex operator+(Complex> const> & obj)> > {> > Complex res;> > res.real = real + obj.real;> > res.imag = imag + obj.imag;> > return> res;> > }> > void> print() { cout << real <<> ' + i'> << imag << endl; }> };> // Driver code> int> main()> {> > Complex c1(10, 5), c2(2, 4);> > // An example call to 'operator+'> > Complex c3 = c1 + c2;> > c3.print();> }> |
>
>Izvade
12 + i9>
Paskaidrojums: Iepriekš minētajā piemērā operators “+” ir pārslogots. Parasti šo operatoru izmanto, lai pievienotu divus skaitļus (veselus skaitļus vai peldošā komata skaitļus), bet šeit operators liek veikt divu iedomātu vai komplekso skaitļu saskaitīšanu. Lai uzzinātu vairāk par šo, skatiet rakstu - Operatora pārslodze .
2. Izpildes laika polimorfisms
Šāda veida polimorfisms tiek panākts ar Funkciju ignorēšana . Vēlīnā saistīšanās un dinamiskais polimorfisms ir citi izpildlaika polimorfisma nosaukumi. Funkcijas izsaukums tiek atrisināts izpildlaikā in izpildlaika polimorfisms . Turpretim ar kompilēšanas laika polimorfismu kompilators nosaka, kuru funkcijas izsaukumu saistīt ar objektu pēc tam, kad tas ir secināts izpildlaikā.
kā pārbaudīt bloķētos numurus operētājsistēmā Android
A. Funkciju ignorēšana
Funkciju ignorēšana rodas, ja atvasinātai klasei ir definīcija vienai no bāzes klases locekļu funkcijām. Tiek uzskatīts, ka šī bāzes funkcija ir ignorēta.

Funkcijas ignorēšana Paskaidrojums
Izpildlaika polimorfisms ar datu dalībniekiem
Izpildlaika polimorfismu nevar panākt ar C++ datu dalībniekiem. Apskatīsim piemēru, kur mēs piekļūstam laukam, izmantojot vecāku klases atsauces mainīgo, kas attiecas uz atvasinātās klases gadījumu.
C++
// C++ program for function overriding with data members> #include> using> namespace> std;> // base class declaration.> class> Animal {> public> :> > string color => 'Black'> ;> };> // inheriting Animal class.> class> Dog :> public> Animal {> public> :> > string color => 'Grey'> ;> };> // Driver code> int> main(> void> )> {> > Animal d = Dog();> // accessing the field by reference> > // variable which refers to derived> > cout << d.color;> }> |
>
>Izvade
Black>
Mēs redzam, ka vecākklases atsauce vienmēr attieksies uz vecākklases datu dalībnieku.
B. Virtuālā funkcija
A virtuālā funkcija ir dalībnieka funkcija, kas tiek deklarēta pamatklasē, izmantojot atslēgvārdu virtual, un tiek atkārtoti definēta (Overridden) atvasinātajā klasē.
Daži galvenie punkti par virtuālajām funkcijām:
- Virtuālajām funkcijām ir dinamisks raksturs.
- Tie tiek definēti, ievietojot atslēgvārdu virtuāls pamatklasē un vienmēr tiek deklarēti ar pamatklasi un tiek ignorēti pakārtotajā klasē
- Runtime laikā tiek izsaukta virtuālā funkcija
Zemāk ir C++ programma virtuālās funkcijas demonstrēšanai:
C++
Fredijs Merkūrijs
// C++ Program to demonstrate> // the Virtual Function> #include> using> namespace> std;> // Declaring a Base class> class> GFG_Base {> public> :> > // virtual function> > virtual> void> display()> > {> > cout <<> 'Called virtual Base Class function'> > <<> '
'> ;> > }> > void> print()> > {> > cout <<> 'Called GFG_Base print function'> > <<> '
'> ;> > }> };> // Declaring a Child Class> class> GFG_Child :> public> GFG_Base {> public> :> > void> display()> > {> > cout <<> 'Called GFG_Child Display Function'> > <<> '
'> ;> > }> > void> print()> > {> > cout <<> 'Called GFG_Child print Function'> > <<> '
'> ;> > }> };> // Driver code> int> main()> {> > // Create a reference of class GFG_Base> > GFG_Base* base;> > GFG_Child child;> > base = &child;> > // This will call the virtual function> > base->GFG_Base::display();> > // this will call the non-virtual function> > base->print();> }> |
>
>
visu lielo burtu saīsne ExcelIzvade
Called virtual Base Class function Called GFG_Base print function>
2. piemērs:
C++
// C++ program for virtual function overriding> #include> using> namespace> std;> class> base {> public> :> > virtual> void> print()> > {> > cout <<> 'print base class'> << endl;> > }> > void> show() { cout <<> 'show base class'> << endl; }> };> class> derived :> public> base {> public> :> > // print () is already virtual function in> > // derived class, we could also declared as> > // virtual void print () explicitly> > void> print() { cout <<> 'print derived class'> << endl; }> > void> show() { cout <<> 'show derived class'> << endl; }> };> // Driver code> int> main()> {> > base* bptr;> > derived d;> > bptr = &d;> > // Virtual function, binded at> > // runtime (Runtime polymorphism)> > bptr->print();> > // Non-virtual function, binded> > // at compile time> > bptr->parādīt();> > return> 0;> }> |
>
>Izvade
print derived class show base class>