C ++ Çoklu, Çok Düzeyli ve Hiyerarşik Kalıtım

Bu makalede, C ++ programlamadaki farklı kalıtım modelleri hakkında bilgi edineceksiniz: Örneklerle Çoklu, Çok Düzeyli ve Hiyerarşik kalıtım.

Kalıtım, nesne yönelimli bir programlama dilinin temel özelliklerinden biridir. Yazılım geliştiricilerin mevcut sınıftan yeni bir sınıf türetmesine olanak tanır. Türetilmiş sınıf, temel sınıfın (mevcut sınıf) özelliklerini miras alır.

C ++ programlamasında çeşitli kalıtım modelleri vardır.

C ++ Çok Düzeyli Kalıtım

C ++ programlamasında, yalnızca temel sınıftan bir sınıf türetmekle kalmaz, aynı zamanda türetilmiş sınıftan da bir sınıf türetebilirsiniz. Bu kalıtım biçimi, çok düzeyli kalıtım olarak bilinir.

a sınıfı (… ); B sınıfı: genel A (…); C sınıfı: genel B (………);

Burada, B sınıfı, temel A sınıfından ve C sınıfı, türetilmiş B sınıfından türetilmiştir.

Örnek 1: C ++ Çok Düzeyli Devralma

 #include using namespace std; class A ( public: void display() ( cout<<"Base class content."; ) ); class B : public A ( ); class C : public B ( ); int main() ( C obj; obj.display(); return 0; )

Çıktı

 Temel sınıf içeriği.

Bu programda, C sınıfı, B sınıfından (temel A sınıfından türetilmiştir) türetilmiştir.

C sınıfının obj nesnesi main()işlevde tanımlanır .

Ne zaman display()fonksiyon denir, display()sınıfta bir yürütülür. Bunun nedeni, display()C ve B sınıflarında hiçbir işlevin olmamasıdır .

Derleyici ilk önce display()C sınıfındaki işlevi arar. İşlev orada bulunmadığından, işlevi B sınıfında arar (C, B'den türetildiği için).

İşlev ayrıca B sınıfında mevcut değildir, bu nedenle derleyici onu A sınıfında arar (B, A'dan türetildiği için).

Eğer display()fonksiyon C var derleyici geçersiz kılar display()A sınıfı (nedeniyle üye fonksiyon geçersiz).

C ++ Çoklu Kalıtım

C ++ programlamasında, bir sınıf birden fazla ebeveynden türetilebilir. Örneğin: Bir Bat sınıfı, Mammal ve WingedAnimal temel sınıflarından türetilmiştir. Mantıklı çünkü yarasa kanatlı bir hayvan olduğu kadar memelidir.

Örnek 2: C ++ Programlamada Çoklu Kalıtım

 #include using namespace std; class Mammal ( public: Mammal() ( cout << "Mammals can give direct birth." << endl; ) ); class WingedAnimal ( public: WingedAnimal() ( cout << "Winged animal can flap." << endl; ) ); class Bat: public Mammal, public WingedAnimal ( ); int main() ( Bat b1; return 0; ) 

Çıktı

Memeliler doğrudan doğum yapabilirler. Kanatlı hayvan kanat çırpabilir.

Çoklu Kalıtımda Belirsizlik

Çoklu kalıtımla ilgili en belirgin sorun, işlevin geçersiz kılınması sırasında ortaya çıkar.

İki temel sınıfın, türetilmiş sınıfta geçersiz kılınmayan aynı işleve sahip olduğunu varsayalım.

Türetilmiş sınıfın nesnesini kullanarak işlevi çağırmaya çalışırsanız, derleyici hata gösterir. Bunun nedeni, derleyicinin hangi işlevi çağıracağını bilmemesidir. Örneğin,

 class base1 ( public: void someFunction( ) (… .… … . ) ); class base2 ( void someFunction( ) (… .… … . ) ); class derived : public base1, public base2 ( ); int main() ( derived obj; obj.someFunction() // Error! )  

Bu sorun, hangi işlevin base1 veya base2 olarak sınıflandırılacağını belirtmek için kapsam çözümleme işlevi kullanılarak çözülebilir.

 int main () (obj.base1 :: someFunction (); // Base1 sınıfının işlevi obj.base2 :: someFunction (); // Base2 sınıfının işlevi çağrılır.)

C ++ Hiyerarşik Kalıtım

Temel sınıftan birden fazla sınıf miras alınırsa, buna hiyerarşik miras denir. Hiyerarşik kalıtımda, alt sınıflarda ortak olan tüm özellikler temel sınıfa dahil edilir.

Örneğin: Fizik, Kimya, Biyoloji, Bilim sınıfından türetilmiştir.

Hiyerarşik Devralmanın Sözdizimi

 sınıf base_class (…) class first_derived_class: public base_class (…) class second_derived_class: public base_class (…) class third_derived_class: public base_class (…)

Ilginç makaleler...