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
publicveprotectedtaban sınıfı üyeleriniprotectedtüretilmiş sınıf. - Özel kalıtım yapar
publicveprotectedtaban sınıfı üyeleriniprivatetü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çı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 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ş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 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) |








