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 public
kodda
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
, protected
ve 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
public
temel sınıfın üyelerini yapar ve temel sınıfın üyeleri türetilmiş sınıfta kalır .public
protected
protected
- korumalı kalıtım yapar
public
veprotected
taban sınıfı üyeleriniprotected
türetilmiş sınıf. - Özel kalıtım yapar
public
veprotected
taban sınıfı üyeleriniprivate
tü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 PublicDerived
dan Base
içinde kamu mod .
Sonuç olarak, içinde PublicDerived
:
- olarak prot kalıtsaldır korumalı .
- pub ve herkese açık
getPVT()
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 ProtectedDerived
dan Base
içinde korunmuş mod .
Sonuç olarak, içinde ProtectedDerived
:
- prot, pub ve korumalı
getPVT()
olarak miras alınır . pvt
içinde özel olduğu için erişilemezBase
.
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 PrivateDerived
dan Base
içinde özel mod .
Sonuç olarak, içinde PrivateDerived
:
- prot
pub
ve ö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) |