2010-01-19 18 views
10

क्यों संरक्षित और निजी विरासत परिभाषित और प्रस्तावित किया जाता है? मैं कुछ मामलों को समझता हूं निजी विरासत का उपयोग किया जा सकता है लेकिन इसकी अनुशंसा नहीं की जाती है। संरक्षित विरासत के बारे में कैसे?संरक्षित विरासत

क्या कोई मुझे ऐसी स्थिति प्रदान कर सकता है जिसमें संरक्षित विरासत एक विकल्प है?

मुझे शायद ही कभी यह दिखाई दे।

बहुत बहुत धन्यवाद!

उत्तर

6

निजी विरासत आमतौर पर मिश्रित के लिए उपयोग किया जाता है --- जहां लोगों को "ए-ए" विरासत की बजाय बेस क्लास से कार्यक्षमता प्राप्त करने का अधिकार होता है।

संरक्षित विरासत का उपयोग मिश्रित के लिए भी किया जा सकता है, जहां मिश्रित कार्यक्षमता भी डाउनस्ट्रीम कक्षाओं में उपलब्ध होनी चाहिए।

+0

की कार्यक्षमता के बिना व्युत्पन्न 2 का उपयोग करने की अनुमति दें, क्या आप मुझे संरक्षित का उदाहरण दे सकते हैं विरासत, उदाहरण के लिए, निजी विरासत के लिए, आम तौर पर इंजन से प्राप्त व्यक्तिगत रूप से कार का उपयोग किया जाता है। – skydoor

+1

+1। मुझे लगता है कि संरक्षित विरासत के लिए एकमात्र उपयोग है। –

+3

कार 'है-ए 'इंजन। तो आदर्श रूप से 'रचना' का उपयोग किया जाना चाहिए और 'विरासत' नहीं होना चाहिए। आम तौर पर रिश्ते 'है-ए' होने पर विरासत का उपयोग करना चाहिए। बस मेरे 2 सेंट। – CodeRain

5

मैं आमतौर पर protected विरासत का उपयोग नहीं करता हूं। वास्तव में, मैं आमतौर पर private विरासत का उपयोग नहीं करता हूं। अगर कुछ लिस्कोव प्रतिस्थापन सिद्धांत को संतुष्ट नहीं करता है तो मुझे किसी भी प्रकार की विरासत का उपयोग करने का कोई कारण नहीं दिखता है; और यदि यह एलएसपी को संतुष्ट करता है तो आप public विरासत का उपयोग करते हैं।

हालांकि, भाषा केवल कक्षा के दृष्टिकोण से private और protected के बीच अंतर करती है (यानी, वर्ग का उपयोग करने वाला कोड अंतर नहीं बता सकता है)।

जब आप want it's semantics, और आप private का उपयोग करना चाहिए protected विरासत का उपयोग करके ऐसी protected नहीं करना चाहती चाहिए।

+1

यदि कुछ निजी विरासत का उपयोग करता है, तो गैर-दोस्तों के पीओवी से, यह आधार से प्राप्त नहीं होता है और इसलिए निश्चित रूप से एलएसपी को संतुष्ट नहीं करता है।निजी विरासत तब होती है जब विरासत एक कार्यान्वयन विस्तार है, सार्वजनिक इंटरफ़ेस का हिस्सा नहीं है। तो शायद यह * एलएसपी को संतुष्ट कर सकता है, शायद नहीं, लेकिन किसी भी तरह से आप इसे नहीं चाहते हैं। –

+0

लिंक कहता है कि पहुंच अस्वीकार कर दी गई है। –

+0

लिंक के बारे में रिपोर्ट के लिए धन्यवाद; मैंने सेमी-आधिकारिक सी ++ सुपर एफएक्यू पर लिंक की ओर इशारा किया है। –

1

यह एक ऐसी स्थिति मैं विरासत संरक्षित

कोष का प्रयोग होता है -> Derived1 -> Derived2

  • मैं चाहता हूँ Derived1 बेस वर्ग
  • मैं में कार्यक्षमता का उपयोग करना चाहते हैं के लिए प्रतिस्थापित किया जा करने के लिए न बेस और क्लाइंट क्लासेस
+0

क्या आप कुछ उदाहरण प्रदान कर सकते हैं? thks – coelhudo

संबंधित मुद्दे