C ++ polimorfizem

V tej vadnici bomo s pomočjo primerov spoznali polimorfizem v jeziku C ++.

Polimorfizem je pomemben koncept objektno usmerjenega programiranja. Preprosto pomeni več oblik. To pomeni, da se ista entiteta (funkcija ali operater) v različnih scenarijih obnaša različno. Na primer

+Operater v C ++ se uporablja za opravljanje dveh posebnih funkcij. Ko se uporablja s števili (cela števila in števila s plavajočo vejico), izvede seštevanje.

 int a = 5; int b = 6; int sum = a + b; // sum = 11

In ko uporabimo +operator z nizi, izvede združevanje nizov. Na primer

 string firstName = "abc "; string lastName = "xyz"; // name = "abc xyz" string name = firstName + lastName;

Polimorfizem v jeziku C ++ lahko izvedemo na naslednje načine:

  1. Preobremenitev funkcije
  2. Preobremenitev operaterja
  3. Preglasitev funkcije
  4. Navidezne funkcije

Preobremenitev funkcije C ++

V C ++ lahko uporabimo dve funkciji z istim imenom, če imata različne parametre (bodisi vrste bodisi število argumentov).

In glede na število / vrsto argumentov se pokličejo različne funkcije. Na primer

 // C++ program to overload sum() function #include using namespace std; // Function with 2 int parameters int sum(int num1, int num2) ( return num1 + num2; ) // Function with 2 double parameters double sum(double num1, double num2) ( return num1 + num2; ) // Function with 3 int parameters int sum(int num1, int num2, int num3) ( return num1 + num2 + num3; ) int main() ( // Call function with 2 int parameters cout << "Sum 1 = " << sum(5, 6) << endl; // Call function with 2 double parameters cout << "Sum 2 = " << sum(5.5, 6.6) << endl; // Call function with 3 int parameters cout << "Sum 3 = " << sum(5, 6, 7) << endl; return 0; )

Izhod

 Vsota 1 = 11 Vsota 2 = 12,1 Vsota 3 = 18

Tu smo ustvarili 3 različne sum()funkcije z različnimi parametri (število / vrsta parametrov). Na podlagi argumentov, posredovanih med klicem funkcije, se pokliče določena sum().

Gre za polimorfizem časa prevajanja, ker prevajalnik ve, katero funkcijo naj izvede, preden je program preveden.

Če želite izvedeti več o tem, obiščite našo vadnico za preobremenitve funkcij C ++.

Preobremenitev operaterja C ++

V C ++ lahko operaterja preobremenimo, če delujemo na uporabniško določenih tipih, kot so predmeti ali strukture.

Ne moremo uporabiti operaterja preobremenitve za osnovne tipe, kot so int, doubleitd

Preobremenitev operaterja je v bistvu preobremenitev funkcij, kjer imajo različne funkcije operaterja enak simbol, vendar različne operande.

In glede na operande se izvajajo različne funkcije operaterja. Na primer

 // C++ program to overload ++ when used as prefix #include using namespace std; class Count ( private: int value; public: // Constructor to initialize count to 5 Count() : value(5) () // Overload ++ when used as prefix void operator ++() ( value = value + 1; ) void display() ( cout << "Count: " << value << endl; ) ); int main() ( Count count1; // Call the "void operator ++()" function ++count1; count1.display(); return 0; )

Izhod

 Štetje: 6

Tu smo preobremenili ++operator, ki deluje na objektih Countrazreda (v tem primeru objekt count1).

Ta preobremenjeni operater smo uporabili za neposredno povečanje spremenljivke vrednosti predmeta count1 za 1.

To je tudi polimorfizem v času prevajanja .

Če želite izvedeti več, obiščite našo vadnico za preobremenitev operaterja C ++.

Preglasitev funkcije C ++

Pri dedovanju C ++ imamo lahko enako funkcijo v osnovnem razredu kot tudi njegovi izpeljani razredi.

Ko funkcijo pokličemo z uporabo predmeta izpeljanega razreda, se izvede funkcija izpeljanega razreda namesto tiste v osnovnem razredu.

Izvajajo se torej različne funkcije, odvisno od predmeta, ki funkcijo pokliče.

To je znano kot preglasitev funkcije v C ++. Na primer

 // C++ program to demonstrate function overriding #include using namespace std; class Base ( public: virtual void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; ) ); int main() ( Derived derived1; // Call print() function of Derived class derived1.print(); return 0; )

Izhod

 Izpeljana funkcija

Tu smo uporabili print()funkcijo v Baserazredu in isto funkcijo v Derivedrazredu

Ko pokličemo print()z uporabo Derivedpredmeta izvedeno1, preglasi print()funkcijo z Basetako, da izvrši print()funkcijo Derivedrazreda.

Gre za polimorfizem izvajalnega okolja, ker prevajalnik ne razreši klica funkcije, ampak je razrešen v času izvajanja.

Če želite izvedeti več, obiščite našo vadnico za preglasitev funkcij C ++.

Navidezne funkcije C ++

V C ++ morda ne bomo mogli preglasiti funkcij, če s kazalcem osnovnega razreda pokažemo na objekt izpeljanega razreda.

Uporaba navideznih funkcij v osnovnem razredu zagotavlja, da je funkcijo v teh primerih mogoče preglasiti.

Tako navidezne funkcije dejansko spadajo pod preglasitev funkcij . Na primer

 // C++ program to demonstrate the use of virtual functions #include using namespace std; class Base ( public: virtual void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" 

Output

 Derived Function

Here, we have used a virtual function print() in the Base class to ensure that it is overridden by the function in the Derived class.

Virtual functions are runtime polymorphism.

To learn more, visit our C++ Virtual Functions tutorial.

Why Polymorphism?

Polymorphism allows us to create consistent code. For example,

Suppose we need to calculate the area of a circle and a square. To do so, we can create a Shape class and derive two classes Circle and Square from it.

In this case, it makes sense to create a function having the same name calculateArea() in both the derived classes rather than creating functions with different names, thus making our code more consistent.

Zanimive Članki...