C ++ प्रोग्रामिंग में सार्वजनिक, संरक्षित और निजी विरासत

इस ट्यूटोरियल में, हम उदाहरणों की मदद से C ++ में सार्वजनिक, संरक्षित और निजी विरासत का उपयोग करना सीखेंगे।

C ++ वंशानुक्रम में, हम अलग-अलग एक्सेस मोड में बेस क्लास से एक चाइल्ड क्लास प्राप्त कर सकते हैं। उदाहरण के लिए,

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

कीवर्ड publicको कोड में देखें

 class Derived : public Base

इसका मतलब है कि हमने सार्वजनिक मोड में बेस क्लास से एक व्युत्पन्न वर्ग बनाया है । वैकल्पिक रूप से, हम कक्षाओं को संरक्षित या निजी मोड में भी प्राप्त कर सकते हैं।

ये 3 कीवर्ड ( public, protected, और private) के रूप में जाना जाता है पहुँच विनिर्देशक सी ++ विरासत में।

C ++ में सार्वजनिक, संरक्षित और निजी विरासत

सार्वजनिक , संरक्षित और निजी विरासत में निम्नलिखित विशेषताएं हैं:

  • सार्वजनिक उत्तराधिकार व्युत्पन्न publicवर्ग publicमें आधार वर्ग के सदस्यों को बनाता है , और protectedआधार वर्ग के सदस्य protectedव्युत्पन्न वर्ग में बने रहते हैं ।
  • संरक्षित वंशानुक्रमpublic और protectedआधार वर्ग के सदस्यों protectedको व्युत्पन्न वर्ग में बनाता है ।
  • निजी उत्तराधिकार व्युत्पन्न वर्ग में आधार वर्ग के सदस्यों publicऔर protectedसदस्यों को बनाता है private

नोट: private बेस क्लास के सदस्य व्युत्पन्न वर्ग के लिए दुर्गम हैं।

 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 )

उदाहरण 1: C ++ सार्वजनिक इनहेरिटेंस

 // 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; )

आउटपुट

 निजी = 1 संरक्षित = 2 सार्वजनिक = 3

यहाँ, हम व्युत्पन्न है PublicDerivedसे Baseमें सार्वजनिक मोड

परिणामस्वरूप PublicDerived:

  • विरोध विरासत में मिला है
  • पब और जनता केgetPVT() रूप में विरासत में मिला है ।
  • निजी के बाद से प्राइवेट में दुर्गम है Base

चूंकि निजी और संरक्षित सदस्य सुलभ नहीं हैं, हमें सार्वजनिक कार्य करने getPVT()और getProt()उन्हें एक्सेस करने की आवश्यकता है:

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

सार्वजनिक विरासत में पहुंच

अभिगम्यता निजी सदस्य संरक्षित सदस्य जनता के सदस्य
बेस क्लास हाँ हाँ हाँ
व्युत्पन्न वर्ग नहीं न हाँ हाँ

उदाहरण 2: C ++ संरक्षित वंशानुक्रम

 // 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; )

आउटपुट

निजी तक पहुँचा नहीं जा सकता। रक्षित = २ लोक = ३

यहाँ, हम व्युत्पन्न है ProtectedDerivedसे Baseमें सुरक्षित मोड

परिणामस्वरूप ProtectedDerived:

  • विरोध, पब और संरक्षित केgetPVT() रूप में विरासत में मिला है
  • pvtयह निजी होने के बाद से दुर्गम है Base

जैसा कि हम जानते हैं, संरक्षित सदस्यों तक सीधे पहुँचा नहीं जा सकता है।

नतीजतन, हम उपयोग नहीं कर सकते getPVT()से ProtectedDerived। यही कारण है कि पब चर का उपयोग करने के लिए हमें getPub()फ़ंक्शन बनाने की आवश्यकता है ProtectedDerived

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

संरक्षित विरासत में पहुंच

अभिगम्यता निजी सदस्य संरक्षित सदस्य जनता के सदस्य
बेस क्लास हाँ हाँ हाँ
व्युत्पन्न वर्ग नहीं न हाँ हां (संरक्षित चर के रूप में विरासत में मिला)

उदाहरण 3: C ++ प्राइवेट इनहेरिटेंस

 // 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; )

आउटपुट

निजी तक पहुँचा नहीं जा सकता। रक्षित = २ लोक = ३

यहाँ, हम व्युत्पन्न है PrivateDerivedसे Baseमें निजी मोड

परिणामस्वरूप PrivateDerived:

  • विरोध, pubऔर निजी केgetPVT() रूप में विरासत में मिला है ।
  • निजी के बाद से प्राइवेट में दुर्गम है Base

जैसा कि हम जानते हैं, निजी सदस्यों तक सीधे पहुँचा नहीं जा सकता है।

नतीजतन, हम उपयोग नहीं कर सकते getPVT()से PrivateDerived। यही कारण है कि पब चर का उपयोग करने के लिए हमें getPub()फ़ंक्शन बनाने की आवश्यकता है PrivateDerived

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

निजी विरासत में पहुंच

अभिगम्यता निजी सदस्य संरक्षित सदस्य जनता के सदस्य
बेस क्लास हाँ हाँ हाँ
व्युत्पन्न वर्ग नहीं न हां (निजी चर के रूप में विरासत में मिला) हां (निजी चर के रूप में विरासत में मिला)

दिलचस्प लेख...