Kalıtım
[vc_row][vc_column][vc_column_text]
Kalıtım (inheritance) bir nesnenin başka bir nesnenin özelliklerini birebir devralmasıdır. Yeni sınıflar kalıtım mekanizmasıyla var olan sınıflardan türetilebilirler. Sınıfların türetildiği sınıflara ana sınıf ve türetilen sınıflara ise alt sınıf denir.
class Arac { private: string Mensei; string Renk; ... }; class Araba : Arac { ///Mensei ve Renk özelliklerini içerir ///Araba için diğer özellikler burada bulunacaktır };
Bu örnekte Arac ana sınıf, Araba ise türetilmiş sınıftır. Araba sınıfı otomatik olarak Mensei ve Renk özelliklerini kalıtır ve Araba’ya özel özellikleri ve fonksiyonları eklemekte özgürdür.
C++’da Kalıtım Tipleri
C++ public, private ve protected olmak üzere 3 çeşit kalıtım tipini destekler. Public kalıtım’da türetilen sınıf ana sınıfın private ve public tüm üye değişkenlerini kalıtır fakat sadece ana sınıfın public elemanlarına doğrudan erişebilir.
Insan.h
#pragma once #include #include <string> using namespace std; class Insan { private: string isim; string soyIsim; int yas; public: Insan(); Insan(string i, string s); Insan(string i, string s, int y); ~Insan(); void merhaba() const; };
Ogrenci.h
#pragma once #include "Insan.h" class Ogrenci : public Insan { public: Ogrenci(); ~Ogrenci(); };
Ogrenci.cpp
#include "Ogrenci.h" Ogrenci::Ogrenci() { } Ogrenci::~Ogrenci() { }
main.cpp
#include "Insan.h" #include "Ogrenci.h" int main() { Ogrenci ogrenci1; //ogrenci1.isim = "Burak";///Hata: private elemana doğrudan erişim ogrenci1.merhaba(); return 0; }
Bu örnekte bir Insan sınıfı var. Daha sonra Ogrenci sınıfı geliyor ve “:” işareti ve public Insan ile devam ediyor. Bu, Ogrenci sınıfının, Insan sınıfının public kalıtımlı alt sınıfı olduğunu gösteriyor. Aynı zamanda Ogrenci sınıfının varsayılan yapıcı ve yıkıcı fonksiyonları vardır ki bunlar Insan sınıfınınkilerden ayrıdır.
Bahsedildiği gibi C++ kalıtımında public, private ve protected olmak üzere 3 tip vardır.
Erişim | public | protected | private |
Aynı sınıf | + | + | + |
Türetilmiş sınıf | + | + | – |
Sınıf dışı | + | – | – |
Örnek: Public Inheritence
class Base { public: int m_public; private: int m_private; protected: int m_protected; }; class Pub: public Base { public: Pub() { m_public = 1; // doğru: m_public public olarak kalıtılmıştır m_private = 2; // yanlış: m_private türetilmiş sınıftan erişilemez m_protected = 3; // doğru: m_protected protected olarak kalıtılmıştır } }; int main() { Base base; base.m_public = 1; // doğru base.m_private = 2; // yanlış: m_private erişilemez base.m_protected = 3; // yanlış: m_protected doğrudan erişilemez Pub pub; pub.m_public = 1; // doğru pub.m_private = 2; // yanlış: m_private Pub tarafından erişilemez pub.m_protected = 3; // yanlış: m_protected doğrudan erişilemez
Örnek: Private Inheritence
class Base { public: int m_public; private: int m_private; protected: int m_protected; }; class Pri: private Base { public: Pri() { m_public = 1; // doğru m_private = 2; // yanlış: türetilmiş sınıflar ana sınıftaki private'a erişemez m_protected = 3; // doğru } }; int main() { Base base; base.m_public = 1; // doğru base.m_private = 2; // yanlış: m_private Base sınıfında private'dır base.m_protected = 3; // yanlış: m_protected Base sınıfta protected'dır Pri pri; pri.m_public = 1; // yanlış: m_public artık private'dır pri.m_private = 2; // yanlış: m_private artık erişilemezdir pri.m_protected = 3; // yanlış: m_protected artık private'dır return 0; }
public | protected | private |
public üyeler türetilmiş sınıfta da public olur ve üye ve üye olmayan fonksiyonlar tarafından doğrudan erişilebilirler | public üyeler türetilmiş sınıfta protected olurlar ve üye fonksiyonlar tarafından erişilebilirler | public üyeler türetilmiş sınıfta private olurlar ve üye fonksiyonlar tarafından erişilebilirler |
protected üyeler türetilmiş sınıfta da protected olur ve üye fonksiyonlar tarafından erişilebilirler | üyeler türetilmiş fonksiyonda yine protected olurlar ve üye fonksiyonlar tarafından erişilebilirler | protected üyeler türetilmiş sınıfta private olurlar ve üye fonksiyonlar tarafından erişilebilirler |
private üyeler türetilmiş sınıfta gizlidir ve erişilemezler | private üyeler türetilmiş sınıfta gizlidir ve erişilemezler | private üyeler türetilmiş sınıfta gizlidir ve erişilemezler |
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column width=”1/2″][vc_btn title=”Önceki Ders” color=”green” align=”left” i_icon_fontawesome=”fa fa-chevron-left” add_icon=”true” link=”url:https%3A%2F%2Fyapbenzet.org.tr%2Fcpp-sinif-kapsam-alani%2F|||”][/vc_column][vc_column width=”1/2″][vc_btn title=”Sonraki Ders” color=”green” align=”right” i_align=”right” i_icon_fontawesome=”fa fa-chevron-right” add_icon=”true” link=”url:https%3A%2F%2Fyapbenzet.org.tr%2Fcpp-erisim-belirleyiciler%2F|||”][/vc_column][/vc_row]