C ++ Polimorfizmi

Bu eğiticide, örnekler yardımıyla C ++ 'daki polimorfizm hakkında bilgi edineceğiz.

Çok biçimlilik, nesne yönelimli programlamanın önemli bir kavramıdır. Basitçe birden fazla form anlamına gelir. Yani aynı varlık (işlev veya operatör) farklı senaryolarda farklı davranır. Örneğin,

+C ++ Operatör iki özel fonksiyonları gerçekleştirmek için kullanılır. Sayılarla (tamsayılar ve kayan noktalı sayılar) kullanıldığında toplama yapar.

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

Ve +operatörü dizelerle kullandığımızda, dizge birleştirme gerçekleştirir. Örneğin,

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

C ++ 'da polimorfizmi aşağıdaki yolları kullanarak uygulayabiliriz:

  1. Fonksiyon aşırı yükleme
  2. Operatör aşırı yükleme
  3. İşlev geçersiz kılma
  4. Sanal işlevler

C ++ İşlev Aşırı Yüklemesi

C ++ 'da, farklı parametrelere sahiplerse (türler veya bağımsız değişken sayısı) aynı ada sahip iki işlevi kullanabiliriz.

Ve argümanların sayısına / türüne bağlı olarak farklı işlevler çağrılır. Örneğin,

 // 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; )

Çıktı

 Toplam 1 = 11 Toplam 2 = 12.1 Toplam 3 = 18

Burada, sum()farklı parametrelerle (parametre sayısı / türü) 3 farklı fonksiyon oluşturduk . Ve bir işlev çağrısı sırasında iletilen argümanlara göre belirli sum()bir çağrılır.

Bu bir var derleme zamanı polimorfizmi derleyici programı derlenmiş önce yürütmek için işlev hangi bildiği için.

Daha fazla bilgi edinmek için C ++ İşlev Aşırı Yükleme eğitimimizi ziyaret edin.

C ++ Operatör Aşırı Yüklemesi

C ++ 'da, nesneler veya yapılar gibi kullanıcı tanımlı türler üzerinde çalıştığımız sürece bir operatörü aşırı yükleyebiliriz.

Biz gibi temel türleri için aşırı operatörünü kullanamazsınız int, doublevb

Operatör aşırı yüklemesi, temelde, farklı operatör işlevlerinin aynı sembole ancak farklı işlenenlere sahip olduğu işlev aşırı yüklemesidir.

Ve işlenenlere bağlı olarak farklı operatör fonksiyonları yürütülür. Örneğin,

 // 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; )

Çıktı

 Sayı: 6

Burada, sınıfın ++nesneleri Count(bu durumda nesne sayımı1) üzerinde çalışan operatörü aşırı yükledik.

Bu aşırı yüklenmiş operatörü, count1 nesnesinin değer değişkenini doğrudan artırmak için kullandık 1.

Bu aynı zamanda bir derleme zamanı polimorfizmidir .

Daha fazla bilgi edinmek için C ++ Operatör Aşırı Yüklemesi eğitimimizi ziyaret edin.

C ++ İşlevini Geçersiz Kılma

C ++ kalıtımında, temel sınıfta ve türetilmiş sınıflarında aynı işleve sahip olabiliriz.

Türetilmiş sınıfın bir nesnesini kullanarak işlevi çağırdığımızda, temel sınıftaki işlev yerine türetilmiş sınıfın işlevi çalıştırılır.

Dolayısıyla, işlevi çağıran nesneye bağlı olarak farklı işlevler yürütülür.

Bu, C ++ ' da işlevi geçersiz kılma olarak bilinir . Örneğin,

 // 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; )

Çıktı

 Türetilmiş Fonksiyon

Burada, bir kullanmışlardır print()işlev Basesınıf ve aynı işlevi Derivedsınıfta

Biz çağrı yaparken print()kullanarak Derivednesne derived1, bu geçersiz kılar print()işlevini Baseyürüterek print()işlevini Derivedsınıfına.

Bu bir çalışma zamanı polimorfizmidir çünkü işlev çağrısı derleyici tarafından çözülmez, bunun yerine çalışma zamanında çözülür.

Daha fazla bilgi edinmek için C ++ Fonksiyonu Geçersiz Kılma eğitimimizi ziyaret edin.

C ++ Sanal İşlevler

C ++ 'da, türetilmiş sınıfın bir nesnesine işaret etmek için temel sınıfın bir işaretçisini kullanırsak, işlevleri geçersiz kılamayabiliriz.

Kullanımı sanal fonksiyonları taban sınıfı içinde teminat altın fonksiyonu bu durumlarda geçersiz kılınan olabilir.

Bu nedenle, sanal işlevler aslında işlev geçersiz kılma kapsamına girer . Örneğin,

 // 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.

Ilginç makaleler...