दिलचस्प पोस्ट
MySQL उच्च CPU उपयोग मैक उपयोगकर्ता और वॉर्निंग प्राप्त करना: नोकोगिरि को लिबक्सएमएल संस्करण 2.7.8 के खिलाफ बनाया गया था, लेकिन गतिशील रूप से लोड 2.7.3 # यदि DEBUG बनाम कंडीशनल ("DEBUG") आईओएस 6 में एटोरोटेशन के लिए एप्लिकेशन को पूरी तरह से सही तरीके से कैसे काम करना है? Safari में console.log के डिफ़ॉल्ट व्यवहार को मैं कैसे बदल सकता हूँ? इकाई फ़्रेमवर्क के साथ डेटाअनोटेशन का उपयोग करना । htaccess फिर से लिखना चर प्राप्त करें पैरामीटर वाला क्वेरी क्या है? जीसीसी: – स्टार्ट-समूह और -एंड-समूह कमांड लाइन विकल्प क्या हैं? जावा में कैसे काम करता है बिट्सिंग? ie8 var w = window.open () – "संदेश: अमान्य तर्क।" सी # में int के लिए कोई अतिप्रवाह अपवाद नहीं है? जीमेल ऐप लॉन्च करने के लिए आशय यूआरआई अजगर नकली अनुरोध और प्रतिक्रिया JsonP को डेटा पोस्ट करें

एक्सेस विनिर्देशक क्या हैं? क्या मुझे निजी, संरक्षित या सार्वजनिक से वारिस होना चाहिए?

मैं विरासत के संबंध में पहुंच संशोधकों के अर्थ के बारे में उलझन में हूँ private , protected और public कीवर्ड से संबंधित विरासत के बीच अंतर क्या है?

वेब के समाधान से एकत्रित समाधान "एक्सेस विनिर्देशक क्या हैं? क्या मुझे निजी, संरक्षित या सार्वजनिक से वारिस होना चाहिए?"

पहुंच निर्दिष्टकर्ता क्या हैं?

क्लास / स्ट्रेट / यूनियन में सी ++ के लिए 3 access specifiers ये पहुंच विनिर्देशक परिभाषित करते हैं कि कक्षा के सदस्यों को कैसे पहुंचा जा सकता है। बेशक, किसी वर्ग के किसी सदस्य को उस कक्षा के भीतर सुलभ (उस वर्ग के किसी भी सदस्य कार्य के अंदर)। एक्सेस विनिर्देशकों के प्रकार के आगे आगे बढ़ते हुए, वे हैं:

जनता – वर्ग के किसी वस्तु के माध्यम से सार्वजनिक रूप से घोषित सदस्यों को क्लास के बाहर से पहुंचा जा सकता है।

संरक्षितसंरक्षित के रूप में घोषित सदस्यों को कक्षा के बाहर से पहुँचा जा सकता है लेकिन केवल उस श्रेणी से प्राप्त किया गया वर्ग

निजी – ये सदस्य कक्षा के भीतर से ही पहुंच सकते हैं। बाहर की कोई अनुमति नहीं है

एक स्रोत कोड उदाहरण:

 class MyClass { public: int a; protected: int b; private: int c; }; int main() { MyClass obj; obj.a = 10; //Allowed obj.b = 20; //Not Allowed, gives compiler error obj.c = 30; //Not Allowed, gives compiler error } 

वंशानुक्रम और एक्सेस निर्दिष्टकर्ता

सी ++ में विरासत निम्न प्रकारों में से एक हो सकती है:

  • Private विरासत
  • Public विरासत
  • Protected विरासत

इनमें से प्रत्येक के संबंध में सदस्य पहुंच नियम यहां दिए गए हैं:

सबसे पहले और सबसे महत्वपूर्ण नियम एक वर्ग के Private सदस्य किसी भी कक्षा तक के सदस्यों को छोड़कर कहीं भी सुलभ नहीं होते हैं।

सार्वजनिक विरासत:

बेस कक्षा के सभी Public सदस्य बन गए वर्ग के Public सदस्य हैं और
बेस क्लास के सभी Protected सदस्य बनने वाले वर्ग के Protected सदस्य बन जाते हैं।

अर्थात सदस्यों की पहुंच में कोई परिवर्तन नहीं। पहले जिन तरीकों पर हम चर्चा करते थे, वे इन नियमों पर लागू होते हैं।

कोड उदाहरण:

 Class Base { public: int a; protected: int b; private: int c; }; class Derived:public Base { void doSomething() { a = 10; //Allowed b = 20; //Allowed c = 30; //Not Allowed, Compiler Error } }; int main() { Derived obj; obj.a = 10; //Allowed obj.b = 20; //Not Allowed, Compiler Error obj.c = 30; //Not Allowed, Compiler Error } 

निजी विरासत:

बेस कक्षा के सभी Public सदस्य बनने वाले वर्ग के Private सदस्य बन जाते हैं;
बेस क्लास के सभी Protected सदस्य बनने वाले वर्ग के Private सदस्य बन जाते हैं।

एक कोड उदाहरण:

 Class Base { public: int a; protected: int b; private: int c; }; class Derived:private Base //Not mentioning private is OK because for classes it defaults to private { void doSomething() { a = 10; //Allowed b = 20; //Allowed c = 30; //Not Allowed, Compiler Error } }; class Derived2:public Derived { void doSomethingMore() { a = 10; //Not Allowed, Compiler Error, a is private member of Derived now b = 20; //Not Allowed, Compiler Error, b is private member of Derived now c = 30; //Not Allowed, Compiler Error } }; int main() { Derived obj; obj.a = 10; //Not Allowed, Compiler Error obj.b = 20; //Not Allowed, Compiler Error obj.c = 30; //Not Allowed, Compiler Error } 

संरक्षित विरासत:

आधार वर्ग के सभी Public सदस्य बनने वाले वर्ग के Protected सदस्य बन जाते हैं;
बेस क्लास के सभी Protected सदस्य बनने वाले वर्ग के Protected सदस्य बन जाते हैं।

एक कोड उदाहरण:

 Class Base { public: int a; protected: int b; private: int c; }; class Derived:protected Base { void doSomething() { a = 10; //Allowed b = 20; //Allowed c = 30; //Not Allowed, Compiler Error } }; class Derived2:public Derived { void doSomethingMore() { a = 10; //Allowed, a is protected member inside Derived & Derived2 is public derivation from Derived, a is now protected member of Derived2 b = 20; //Allowed, b is protected member inside Derived & Derived2 is public derivation from Derived, b is now protected member of Derived2 c = 30; //Not Allowed, Compiler Error } }; int main() { Derived obj; obj.a = 10; //Not Allowed, Compiler Error obj.b = 20; //Not Allowed, Compiler Error obj.c = 30; //Not Allowed, Compiler Error } 

याद रखें कि समान एक्सेस नियम कक्षाओं और सदस्यों को विरासत पदानुक्रम के नीचे लागू होते हैं।


नोट करने के लिए महत्वपूर्ण बिंदु:

– पहुंच विशिष्टता प्रति-वर्ग प्रति-ऑब्जेक्ट नहीं है

ध्यान दें कि एक्सेस विनिर्देश C ++ प्रति वर्ग आधार पर काम करता है और प्रति-ऑब्जेक्ट आधार नहीं।
इसका एक अच्छा उदाहरण यह है कि प्रतिलिपि कन्स्ट्रक्टर या असाइनमेंट ऑपरेटर फ़ंक्शन को कॉपी करें, पास किए गए ऑब्जेक्ट के सभी सदस्यों को एक्सेस किया जा सकता है।

– एक व्युत्पन्न वर्ग केवल अपने स्वयं के बेस क्लास के सदस्यों तक ही पहुंच सकता है

निम्न कोड उदाहरण पर विचार करें:

 class Myclass { protected: int x; }; class derived : public Myclass { public: void f( Myclass& obj ) { obj.x = 5; } }; int main() { return 0; } 

यह एक संकलन त्रुटि देता है:

prog.cpp: 4: त्रुटि: 'int Myclass :: x' संरक्षित है

चूंकि व्युत्पन्न वर्ग केवल अपने बेस क्लास के सदस्यों तक ही पहुंच सकता है। ध्यान दें कि ऑब्जेक्ट obj को यहां पारित किया जा रहा है उस derived वर्ग के कार्य से जुड़ा कोई रास्ता नहीं है जिसमें इसे उपयोग किया जा रहा है, यह एक बिल्कुल अलग वस्तु है और इसलिए derived सदस्य कार्य अपने सदस्यों तक नहीं पहुंच सकता है।


friend क्या है? friend अभिगमन विनिर्देश नियमों को कैसे प्रभावित करता है?

आप दूसरे वर्ग के friend के रूप में फ़ंक्शन या क्लास घोषित कर सकते हैं। जब आप ऐसा करते हैं, तो प्रवेश विनिर्देशन नियम friend एड क्लास / फ़ंक्शन पर लागू नहीं होते हैं। कक्षा या कार्य उस विशेष वर्ग के सभी सदस्यों तक पहुंच सकता है।

तो क्या friend तोड़ने के लिए आदान-प्रदान?

नहीं, वे नहीं करते हैं, इसके विपरीत वे इनकिप्सुलेशन बढ़ाते हैं!

friend जहाज दो संस्थाओं के बीच एक जानबूझकर मजबूत युग्मन को इंगित करने के लिए उपयोग किया जाता है।
यदि दो संस्थाओं के बीच एक विशेष संबंध मौजूद है, जैसे कि किसी को private या protected सदस्यों तक पहुंच की जरूरत है, लेकिन आप नहीं चाहते कि सभी को public एक्सेस स्पेसिफायर का उपयोग करके पहुंच हो, तो आपको friend जहाज का उपयोग करना चाहिए।

प्रभावी सी ++ में स्कॉट मैयर की व्याख्या समझने में मदद कर सकती है कि उनका उपयोग कब करना है – सार्वजनिक उत्तराधिकार मॉडल होना चाहिए- एक रिश्ते, जबकि निजी उत्तराधिकार का प्रयोग "कार्यान्वित-इन-नियम-के" के लिए किया जाना चाहिए – ताकि आपके पास नहीं हो सुपरक्लास के इंटरफेस का पालन करने के लिए, आप बस कार्यान्वयन का पुन: उपयोग कर रहे हैं