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 Dog
sınıf, sınıftan türetilir Animal
. Yana Dog
türetilir Animal
üyeleri Animal
için erişilebilir Dog
.

public
Dog'u Animal'dan devralırken anahtar kelimenin kullanımına dikkat edin .
class Dog : public Animal (… );
Ayrıca anahtar kelimeler kullanabilirsiniz private
ve protected
yerine public
. Biz kullanma arasındaki farklar hakkında öğreneceksiniz private
, public
ve protected
daha 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ü Dog
miras 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 .
protected
Bir 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ü protected
türetilmiş sınıftan erişilebilir ve dolayısıyla erişilebilirdir Dog
. Biz başlatıldı gibi biz bunu görebilirsiniz type
içinde Dog
işlevini kullanarak sınıfın setType()
.
Öte yandan, private
değ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, protected
anahtar kelime verileri gizlediğinden, türe doğrudan bir nesneden Dog
veya Animal
sı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 private
ve protected
anahtar 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:
- public: Türetilmiş bir sınıf
public
kipte bildirilirse , temel sınıfın üyeleri türetilmiş sınıf tarafından aynen oldukları gibi miras alınır. - private: Bu durumda, temel sınıfın tüm üyeleri
private
türetilmiş sınıfın üyeleri olur . - korumalı:
public
temel sınıf olmak üyeleriprotected
türetilmiş sınıf üyeleri.
private
Temel sınıf üyeleri her zaman private
tü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