C++'da Kalıtım

C++'da Kalıtım

Miras temel bir kavramdır OOP (Nesneye Yönelik Programlama) . Bir sınıfın başka bir sınıfın özelliklerini (alanlar ve yöntemler) devralmasına izin verilen mekanizmadır. Kalıtım, mevcut sınıflara dayalı olarak yeni sınıflar oluşturmak anlamına gelir. Başka bir sınıftan miras alan bir sınıf, o sınıfın yöntemlerini ve alanlarını yeniden kullanabilir.

Örnek: Aşağıdaki örnekte Animal temel sınıftır ve Dog Cat ve Cow, Animal sınıfını genişleten türetilmiş sınıflardır.

hayvan_sınıfıInheritance C++
   #include          using     namespace     std  ;   class     Animal   {      public  :      void     sound  ()      {      cout      < <     'Animal makes a sound'      < <     endl  ;      }   };   class     Dog     :     public     Animal   {      public  :      void     sound  ()      {      cout      < <     'Dog barks'      < <     endl  ;      }   };   class     Cat     :     public     Animal   {      public  :      void     sound  ()      {      cout      < <     'Cat meows'      < <     endl  ;      }   };   class     Cow     :     public     Animal   {      public  :      void     sound  ()      {      cout      < <     'Cow moos'      < <     endl  ;      }   };   int     main  ()   {      Dog     d  ;      d  .  sound  ();      Cat     c  ;      c  .  sound  ();      Cow     cow  ;      cow  .  sound  ();      return     0  ;   }   

Çıkış
Dog barks Cat meows Cow moos  

Açıklama:

  • Animal, sound() işlevine sahip temel sınıftır.
  • Dog Cat ve Cow, her biri kendi sound() yöntemini tanımlayan türetilmiş sınıflardır.
  • Main()'da Dog Cat ve Cow nesneleri ayrı ayrı oluşturulur.
  • Her nesnede sound()'u çağırdığımızda, ilgili alt sınıf yöntemi çalışır (Köpek havlar, Kedi miyavlar, İnek mırıldanır).

Sözdizimi

C++
   class     ChildClass     :     public     ParentClass   {      // Additional fields and methods   };   

C++'da Kalıtım Nasıl Çalışır?

İki nokta üst üste (:) ile erişim belirteci C++'da kalıtım için kullanılır. Türetilmiş sınıfın (alt sınıf), temel sınıfın (ana sınıf) veri üyelerini (alanlarını) ve üye işlevlerini (yöntemlerini) devralmasına izin verir.
Bir sınıf başka bir sınıfı miras aldığında, ana sınıfın tüm erişilebilir üyelerini alır ve alt sınıf da bunları yeniden tanımlayabilir (geçersiz kılabilir) veya bunlara yeni işlevler ekleyebilir.

C++'da Kalıtım Türleri

miras

Aşağıda C++ tarafından desteklenen farklı kalıtım türleri bulunmaktadır.

1. Tek Miras

Tek kalıtımda bir alt sınıf yalnızca bir süper sınıftan türetilir. Tek ebeveynli bir sınıfın özelliklerini ve davranışını miras alır. Bazen basit miras olarak da bilinir.

mirasSingle Inheritance C++
   #include          using     namespace     std  ;   class     Vehicle     {   public  :      Vehicle  ()     {      cout      < <     'This is a Vehicle'      < <     endl  ;      }   };   class     Car     :     public     Vehicle     {   public  :      Car  ()     {      cout      < <     'This Vehicle is Car'      < <     endl  ;      }   };   int     main  ()     {          Car     obj  ;      return     0  ;   }   

Çıkış
This is a Vehicle This Vehicle is Car  

2. Çoklu Miras

İçinde Çoklu kalıtım bir sınıf birden fazla üst sınıfa sahip olabilir ve özellikleri tüm üst sınıflardan miras alabilir.

Çoklu_devralmaMultiple Inheritance C++
   #include          using     namespace     std  ;   class     LandVehicle   {      public  :      void     landInfo  ()      {      cout      < <     'This is a LandVehicle'      < <     endl  ;      }   };   class     WaterVehicle   {      public  :      void     waterInfo  ()      {      cout      < <     'This is a WaterVehicle'      < <     endl  ;      }   };   // Derived class inheriting from both base classes   class     AmphibiousVehicle     :     public     LandVehicle       public     WaterVehicle   {      public  :      AmphibiousVehicle  ()      {      cout      < <     'This is an AmphibiousVehicle'      < <     endl  ;      }   };   int     main  ()   {      AmphibiousVehicle     obj  ;      obj  .  waterInfo  ();      obj  .  landInfo  ();      return     0  ;   }   

Çıkış
This is an AmphibiousVehicle This is a WaterVehicle This is a LandVehicle  

3. Çok Düzeyli Miras

C++'da çok düzeyli kalıtım, bir sınıfın bir miras zinciri oluşturan başka bir türetilmiş sınıftan türetildiği anlamına gelir.

Çok düzeyli mirasMultilevel Inheritance C++
   #include          using     namespace     std  ;   class     Vehicle   {      public  :      Vehicle  ()      {      cout      < <     'This is a Vehicle'      < <     endl  ;      }   };   // Derived class from Vehicle   class     FourWheeler     :     public     Vehicle   {      public  :      FourWheeler  ()      {      cout      < <     '4 Wheeler Vehicles'      < <     endl  ;      }   };   // Derived class from FourWheeler   class     Car     :     public     FourWheeler   {      public  :      Car  ()      {      cout      < <     'This 4 Wheeler Vehicle is a Car'      < <     endl  ;      }   };   int     main  ()   {      Car     obj  ;      return     0  ;   }   

Çıkış
This is a Vehicle 4 Wheeler Vehicles This 4 Wheeler Vehicle is a Car  

4. Hiyerarşik Miras

Hiyerarşik kalıtımda, tek bir temel sınıftan birden fazla alt sınıf miras alınır. yani tek bir temel sınıftan birden fazla türetilmiş sınıf oluşturulur. Örneğin arabalar da otobüsler de taşıttır.

hiyerarşik_mirasHierarchical Inheritance C++
   #include          using     namespace     std  ;   class     Vehicle   {      public  :      Vehicle  ()      {      cout      < <     'This is a Vehicle'      < <     endl  ;      }   };   class     Car     :     public     Vehicle   {      public  :      Car  ()      {      cout      < <     'This Vehicle is Car'      < <     endl  ;      }   };   class     Bus     :     public     Vehicle   {      public  :      Bus  ()      {      cout      < <     'This Vehicle is Bus'      < <     endl  ;      }   };   int     main  ()   {      Car     obj1  ;      Bus     obj2  ;      return     0  ;   }   

Çıkış
This is a Vehicle This Vehicle is Car This is a Vehicle This Vehicle is Bus  

5. Hibrit Miras

İki veya daha fazla kalıtım türü tek bir programda birleştirildiğinde. Örneğin bir sınıf çoklu kalıtım kullanabilir ve ayrıca çok düzeyli bir miras zincirinin parçası olabilir.

melezMirasHybrid Inheritance C++
   #include          using     namespace     std  ;   class     Vehicle   {      public  :      Vehicle  ()      {      cout      < <     'This is a Vehicle'      < <     endl  ;      }   };   class     Fare   {      public  :      Fare  ()      {      cout      < <     'Fare of Vehicle'      < <     endl  ;      }   };   class     Car     :     public     Vehicle   {      public  :      Car  ()      {      cout      < <     'This Vehical is a Car'      < <     endl  ;      }   };   class     Bus     :     public     Vehicle       public     Fare   {      public  :      Bus  ()      {      cout      < <     'This Vehicle is a Bus with Fare'  ;      }   };   int     main  ()   {      Bus     obj2  ;      return     0  ;   }   

Çıkış
This is a Vehicle Fare of Vehicle This Vehicle is a Bus with Fare 

Hibrit Kalıtım şu sonuçlara yol açabilir: elmas sorunu C++'da. Bu, bir sınıfın her ikisi de aynı temel sınıfı paylaşan iki sınıftan miras alması durumunda meydana gelir. Sonuç olarak türetilmiş sınıf, temel sınıf üyelerinin birden fazla kopyasını alır ve bu da hangisinin kullanılacağı konusunda belirsizlik yaratır.

Not : Çözüm, temel sınıfın yalnızca tek bir kopyasının paylaşılacağı şekilde sanal mirası kullanmaktır.

C++'da Kalıtımın Avantajları

  • Kodun Yeniden Kullanılabilirliği : Türetilmiş sınıf, kod çoğaltmasını önleyerek temel sınıfının veri üyelerini ve yöntemlerini doğrudan yeniden kullanabilir.
  • Soyutlama: Soyutlamayı zorlayan ortak bir arayüz tanımlayan soyut sınıfları (saf sanal işlevlere sahip sınıflar) destekler.
  • Sınıf Hiyerarşisi: Gerçek dünya ilişkilerini modellemek için hiyerarşiler (temel → türetilmiş → daha ileri türetilmiş) oluşturabilirsiniz.
  • Polimorfizm: Sanal işlevler aracılığıyla çalışma zamanı polimorfizmini ve ayrıca işlev aşırı yüklemesi ve şablonlar aracılığıyla derleme zamanı polimorfizmini tam olarak destekler.

C++'da Kalıtımın Dezavantajları

  • Sıkı Bağlantı: Çocuk sınıfı ana sınıfa bağımlı hale gelir. Temel sınıftaki herhangi bir değişiklik, türetilmiş sınıflarda değişiklikleri zorlayabilir.
  • Azaltılmış Esneklik: Bazen kalıtım, kompozisyonun (ilişkisi vardır) daha iyi olacağı ve daha az esnek koda yol açacak şekilde kötüye kullanılır.
  • Artan Karmaşıklık: Derin kalıtım hiyerarşileri (çok düzeyli veya hibrit), kodun bakımını ve hata ayıklamasını zorlaştırabilir.
  • Elmas Sorunu: Hibrit veya çoklu kalıtımda, aynı temel sınıfın birden çok kez miras alınması durumunda belirsizlik ortaya çıkabilir.
  • Sanal İşlevlerin Ek Yükü: Polimorfizm (sanal işlevler) kullanılıyorsa, sanal tablo aramalarından dolayı küçük bir çalışma süresi ek yükü vardır.
Test Oluştur