C ++ Kalıtım

Bu öğreticide, örnekler yardımıyla C ++ 'da kalıtım hakkında bilgi edineceğiz.

Kalıtım, C ++ 'daki Nesne yönelimli programlamanın temel özelliklerinden biridir. Mevcut bir sınıftan (temel sınıf) yeni bir sınıf (türetilmiş sınıf) oluşturmamızı sağlar.

Türetilmiş sınıf, özellikleri temel sınıftan devralır ve kendi ek özelliklerine sahip olabilir. Örneğin,

 class Animal ( // eat() function // sleep() function ); class Dog : public Animal ( // bark() function );

Burada Dogsınıf, sınıftan türetilir Animal. Yana Dogtüretilir Animalüyeleri Animaliçin erişilebilir Dog.

C ++ 'da kalıtım

publicDog'u Animal'dan devralırken anahtar kelimenin kullanımına dikkat edin .

 class Dog : public Animal (… );

Ayrıca anahtar kelimeler kullanabilirsiniz privateve protectedyerine public. Biz kullanma arasındaki farklar hakkında öğreneceksiniz private, publicve protecteddaha sonra bu eğitimde.

bir ilişki

Kalıtım bir ilişkidir . Kalıtımı yalnızca iki sınıf arasında bir is-a ilişkisi varsa kullanırız .

İşte bazı örnekler:

  • Araba bir araçtır.
  • Portakal bir meyvedir.
  • Cerrah doktordur.
  • Köpek bir hayvandır.

Örnek 1: C ++ Devralmanın Basit Örneği

 // C++ program to demonstrate inheritance #include using namespace std; // base class class Animal ( public: void eat() ( cout << "I can eat!" << endl; ) void sleep() ( cout << "I can sleep!" << endl; ) ); // derived class class Dog : public Animal ( public: void bark() ( cout << "I can bark! Woof woof!!" << endl; ) ); int main() ( // Create object of the Dog class Dog dog1; // Calling members of the base class dog1.eat(); dog1.sleep(); // Calling member of the derived class dog1.bark(); return 0; )

Çıktı

Yiyebilirim! Uyuyabilirim! Havlayabiliyorum! Hav! Hav!!

Burada dog1 (türetilmiş sınıfın nesnesi Dog) temel sınıfın üyelerine erişebilir Animal. Çünkü Dogmiras kaldı Animal.

 // Calling members of the Animal class dog1.eat(); dog1.sleep();

C ++ korumalı Üyeler

Erişim değiştirici protected, özellikle C ++ kalıtımı söz konusu olduğunda önemlidir.

Gibi privateüyeleri, protectedüyeler sınıfının erişilemez dışındadır. Bununla birlikte, türetilmiş sınıflar ve arkadaş sınıfları / işlevleri tarafından erişilebilirler .

protectedBir sınıfın verilerini gizlemek istiyorsak, ancak yine de bu verilerin türetilmiş sınıfları tarafından miras alınmasını istiyorsak üyelere ihtiyacımız var .

Korunan hakkında daha fazla bilgi edinmek için C ++ Erişim Değiştiriciler öğreticimize bakın.

Örnek 2: C ++ korumalı Üyeler

 // C++ program to demonstrate protected members #include #include using namespace std; // base class class Animal ( private: string color; protected: string type; public: void eat() ( cout << "I can eat!" << endl; ) void sleep() ( cout << "I can sleep!" << endl; ) void setColor(string clr) ( color = clr; ) string getColor() ( return color; ) ); // derived class class Dog : public Animal ( public: void setType(string tp) ( type = tp; ) void displayInfo(string c) ( cout << "I am a " << type << endl; cout << "My color is " << c << endl; ) void bark() ( cout << "I can bark! Woof woof!!" << endl; ) ); int main() ( // Create object of the Dog class Dog dog1; // Calling members of the base class dog1.eat(); dog1.sleep(); dog1.setColor("black"); // Calling member of the derived class dog1.bark(); dog1.setType("mammal"); // Using getColor() of dog1 as argument // getColor() returns string data dog1.displayInfo(dog1.getColor()); return 0; )

Çıktı

Yiyebilirim! Uyuyabilirim! Havlayabiliyorum! Hav! Hav!! Ben bir memeliyim, rengim siyah

Burada, değişken türü protectedtüretilmiş sınıftan erişilebilir ve dolayısıyla erişilebilirdir Dog. Biz başlatıldı gibi biz bunu görebilirsiniz typeiçinde Dogişlevini kullanarak sınıfın setType().

Öte yandan, privatedeğişken renk içinde başlatılamaz Dog.

 class Dog : public Animal ( public: void setColor(string clr) ( // Error: member "Animal::color" is inaccessible color = clr; ) );

Ayrıca, protectedanahtar kelime verileri gizlediğinden, türe doğrudan bir nesneden Dogveya Animalsınıftan erişemeyiz .

 // Error: member "Animal::type" is inaccessible dog1.type = "mammal";

C ++ Devralmada Erişim Modları

Önceki eğitimlerimizde, genel, özel ve korumalı gibi C ++ erişim belirleyicileri hakkında bilgi edindik.

Şimdiye kadar, publicönceden var olan bir temel sınıftan bir sınıfı miras almak için anahtar kelimeyi kullandık . Bununla birlikte, sınıfları devralmak için privateve protectedanahtar kelimelerini de kullanabiliriz . Örneğin,

 class Animal ( // code ); class Dog : private Animal ( // code );
 class Cat : protected Animal ( // code );

Sınıfları türetmenin çeşitli yolları erişim modları olarak bilinir . Bu erişim modları aşağıdaki etkiye sahiptir:

  1. public: Türetilmiş bir sınıf publickipte bildirilirse , temel sınıfın üyeleri türetilmiş sınıf tarafından aynen oldukları gibi miras alınır.
  2. private: Bu durumda, temel sınıfın tüm üyeleri privatetüretilmiş sınıfın üyeleri olur .
  3. korumalı:public temel sınıf olmak üyeleri protectedtüretilmiş sınıf üyeleri.

privateTemel sınıf üyeleri her zaman privatetüretilmiş sınıf.

Daha fazla bilgi edinmek için C ++ genel, özel, korumalı kalıtım eğiticimizi ziyaret edin.

Devralmada Geçersiz Kılma Üye İşlevi

Temel sınıf ve türetilmiş sınıfın aynı ada ve bağımsız değişkenlere sahip üye işlevlere sahip olduğunu varsayalım.

Türetilmiş sınıfın bir nesnesini oluşturur ve bu üye işlevine erişmeye çalışırsak, türetilmiş sınıftaki üye işlevi temel sınıftaki işlev yerine çağrılır.

Türetilmiş sınıfın üye işlevi, temel sınıfın üye işlevini geçersiz kılar.

C ++ 'da İşlev geçersiz kılma hakkında daha fazla bilgi edinin.

Önerilen Okuma: C ++ Çoklu Kalıtım

Ilginç makaleler...