नहीं, मैं वास्तव में समस्या नहीं दिख रहा।
के बजाय using
, तो आप इस किया जा सकता है:
class X
{
protected:
void protectedFunction() { cout << "i am protected" ; }
};
class Y : public X
{
public:
void protectedFunction() { X::protectedFunction(); }
};
किसी भी वर्ग किसी भी सदस्य है कि यह करने के लिए दिख रहा है ले जा सकते हैं, और यह सार्वजनिक बेनकाब करने के लिए निर्णय लेते हैं। ऐसा करने के लिए यह खराब वर्ग डिजाइन हो सकता है, लेकिन यह निश्चित रूप से भाषा में कोई दोष नहीं है। निजी या संरक्षित सदस्यों में पूरा बिंदु यह है कि कक्षा को ही यह तय करना होगा कि सदस्य को किसके पास पहुंच प्राप्त करनी चाहिए। और यदि कक्षा तय करती है कि "मैं पूरी दुनिया का उपयोग करने जा रहा हूं", तो इस प्रकार वर्ग को डिज़ाइन किया गया है।
यदि हम आपके तर्क का पालन करते हैं, तो गेटर और सेटर्स भी encapsulation का उल्लंघन करते हैं। और कभी-कभी वे करते हैं। लेकिन इसलिए नहीं कि भाषा टूट गई है। बस क्योंकि आप टूटी कक्षाओं को डिजाइन करने का चयन कर रहे हैं।
सदस्य को सुरक्षित बनाकर, आप व्युत्पन्न कक्षाओं को करने की स्वतंत्रता देते हैं, जिसे वे सदस्य के साथ पसंद करते हैं। वे इसे देख सकते हैं, इसलिए वे इसे संशोधित कर सकते हैं, या इसे सार्वजनिक रूप से बेनकाब कर सकते हैं। जब आप सदस्य को सुरक्षित करते हैं तो आपने इसे संभव बनाना चुना है। यदि आप इसे नहीं चाहते थे, तो आपको इसे निजी बनाना चाहिए था।
स्पष्ट करने के लिए - मेरे प्रश्न का उद्देश्य ब्रैकेट या encapsulation तोड़ने के मुश्किल तरीकों के बारे में बात नहीं करना था। मैं सिर्फ डिजाइन निर्णय या सी ++ की कुछ अन्य विशेषताओं पर चर्चा करना चाहता था जो इस सुविधा का कारण बन सकता है। क्या यह छिपाने की समस्या को हल करने के लिए समाधान का सिर्फ एक दुष्प्रभाव है या यह एक स्वतंत्र विशेषता है जिसे सी ++ में कुछ विशिष्ट कारण –
के लिए पेश किया गया था। मुझे लगता है कि लोग इनकार करने के लिए इन सभी तरीकों को सूचीबद्ध कर रहे हैं, यह दस्तावेज नहीं है कि कैसे ऐसा करें, लेकिन यह बताने के लिए कि आपको encapsulation तोड़ना चुनना है। जब कोई त्रुटि होती है क्योंकि आपने किसी निजी विधि या सदस्य तक पहुंचने का प्रयास किया है, जो एक सभ्य अनुस्मारक के रूप में कार्य कर सकता है, और यदि आप डिजाइनर की इच्छाओं का सम्मान करते हैं, तो आप एक सहकारी समाधान तैयार करने के लिए नेतृत्व करते हैं। यह हमेशा दिया जाता है कि encapsulation जबरन टूटा जा सकता है। 'संरक्षित' encapsulation बल के बिना तोड़ा नहीं जा सकता है, जो मुझे नहीं लगता कि भाषा के हिस्से में विफलता है। –