C ++ Programlamada Genel, Korumalı ve Özel Miras

Bu eğitimde, örnekler yardımıyla C ++ 'da genel, korumalı ve özel kalıtımı kullanmayı öğreneceğiz.

C ++ kalıtımda, farklı erişim modlarında temel sınıftan bir çocuk sınıfı türetebiliriz. Örneğin,

 class Base (… .… … . ); class Derived : public Base (… .… … . );

Anahtar kelimeyi dikkat publickodda

 class Derived : public Base

Bu, genel modda temel sınıftan türetilmiş bir sınıf oluşturduğumuz anlamına gelir . Alternatif olarak, korumalı veya özel modlarda da sınıflar türetebiliriz .

Bu 3 anahtar sözcük ( public, protectedve private), C ++ mirasında erişim belirticileri olarak bilinir .

C ++ 'da genel, korumalı ve özel miras

genel , korumalı ve özel miras aşağıdaki özelliklere sahiptir:

  • public miras , türetilmiş sınıfta publictemel sınıfın üyelerini yapar ve temel sınıfın üyeleri türetilmiş sınıfta kalır .publicprotectedprotected
  • korumalı kalıtım yapar publicve protectedtaban sınıfı üyelerini protectedtüretilmiş sınıf.
  • Özel kalıtım yapar publicve protectedtaban sınıfı üyelerini privatetüretilmiş sınıf.

Not: private temel sınıfın üyelerine, türetilmiş sınıfa erişilemez.

 class Base ( public: int x; protected: int y; private: int z; ); class PublicDerived: public Base ( // x is public // y is protected // z is not accessible from PublicDerived ); class ProtectedDerived: protected Base ( // x is protected // y is protected // z is not accessible from ProtectedDerived ); class PrivateDerived: private Base ( // x is private // y is private // z is not accessible from PrivateDerived )

Örnek 1: C ++ genel Kalıtım

 // C++ program to demonstrate the working of public inheritance #include using namespace std; class Base ( private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // function to access private member int getPVT() ( return pvt; ) ); class PublicDerived : public Base ( public: // function to access protected member from Base int getProt() ( return prot; ) ); int main() ( PublicDerived object1; cout << "Private = " << object1.getPVT() << endl; cout << "Protected = " << object1.getProt() << endl; cout << "Public = " << object1.pub << endl; return 0; )

Çıktı

 Özel = 1 Korumalı = 2 Genel = 3

Burada, elde var PublicDeriveddan Baseiçinde kamu mod .

Sonuç olarak, içinde PublicDerived:

  • olarak prot kalıtsaldır korumalı .
  • pub ve herkese açıkgetPVT() olarak miras alınır .
  • pvt, içinde özel olduğu için erişilemez Base.

Yana özel ve korumalı üyeler erişilebilir değildir, kamu işlevler oluşturmak gerekir getPVT()ve getProt()bunlara erişmek için:

 // Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;

Kamu Mirasında Erişilebilirlik

Ulaşılabilirlik özel üyeler korumalı üyeler kamu üyeleri
Temel Sınıf Evet Evet Evet
Türetilmiş sınıf Hayır Evet Evet

Örnek 2: C ++ korumalı Devralma

 // C++ program to demonstrate the working of protected inheritance #include using namespace std; class Base ( private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // function to access private member int getPVT() ( return pvt; ) ); class ProtectedDerived : protected Base ( public: // function to access protected member from Base int getProt() ( return prot; ) // function to access public member from Base int getPub() ( return pub; ) ); int main() ( ProtectedDerived object1; cout << "Private cannot be accessed." << endl; cout << "Protected = " << object1.getProt() << endl; cout << "Public = " << object1.getPub() << endl; return 0; )

Çıktı

Özel erişilemez. Korumalı = 2 Genel = 3

Burada, elde var ProtectedDeriveddan Baseiçinde korunmuş mod .

Sonuç olarak, içinde ProtectedDerived:

  • prot, pub ve korumalıgetPVT() olarak miras alınır .
  • pvtiçinde özel olduğu için erişilemez Base.

Bildiğimiz gibi korumalı üyelere doğrudan erişilemez.

Sonuç olarak, getPVT()from kullanamıyoruz ProtectedDerived. Bu yüzden pub değişkenine erişmek için getPub()fonksiyonu yaratmamız gerekiyor ProtectedDerived.

 // Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;

Korumalı Devralmada Erişilebilirlik

Ulaşılabilirlik özel üyeler korumalı üyeler kamu üyeleri
Temel Sınıf Evet Evet Evet
Türetilmiş sınıf Hayır Evet Evet (korumalı değişkenler olarak miras alınır)

Örnek 3: C ++ özel Kalıtım

 // C++ program to demonstrate the working of private inheritance #include using namespace std; class Base ( private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // function to access private member int getPVT() ( return pvt; ) ); class PrivateDerived : private Base ( public: // function to access protected member from Base int getProt() ( return prot; ) // function to access private member int getPub() ( return pub; ) ); int main() ( PrivateDerived object1; cout << "Private cannot be accessed." << endl; cout << "Protected = " << object1.getProt() << endl; cout << "Public = " << object1.getPub() << endl; return 0; )

Çıktı

Özel erişilemez. Korumalı = 2 Genel = 3

Burada, elde var PrivateDeriveddan Baseiçinde özel mod .

Sonuç olarak, içinde PrivateDerived:

  • prot pubve özelgetPVT() olarak miras alınır .
  • pvt, içinde özel olduğu için erişilemez Base.

Bildiğimiz gibi özel üyelere doğrudan erişilemez.

Sonuç olarak, getPVT()from kullanamıyoruz PrivateDerived. Bu yüzden pub değişkenine erişmek için getPub()fonksiyonu yaratmamız gerekiyor PrivateDerived.

 // Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;

Özel Mirasta Erişilebilirlik

Ulaşılabilirlik özel üyeler korumalı üyeler kamu üyeleri
Temel Sınıf Evet Evet Evet
Türetilmiş sınıf Hayır Evet (özel değişkenler olarak miras alınır) Evet (özel değişkenler olarak miras alınır)

Ilginç makaleler...