std::basic_ios
एक सार्वजनिक निर्माता है :
explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);
IMO, किसी क्लास के पास पब्लिक कंस्ट्रक्टर होने का एकमात्र कारण प्रोग्राम में उस क्लास के स्टैंडअलोन इंस्टेंस का उपयोग करना है। यदि एक वर्ग केवल अन्य वर्गों के पास होता है, तो उससे उतरता है (जैसा कि मामला लगता है basic_ios
), सभी वर्ग के निर्माता होने चाहिए protected
। के कंस्ट्रक्टर std::ios_base
सभी संरक्षित हैं। लेकिन, किसी कारण से, मानक के डिजाइनरों ने इसे basic_ios
सार्वजनिक रूप से एक निर्माता बना दिया ।
basic_ios
कई स्ट्रीम प्रकारों के लिए एक बेस क्लास के रूप में उपयोग किया जाता है, और मैं एक उपयोग के मामले की कल्पना नहीं कर सकता, जहां आपके पास कम से कम basic_istream
या एक नहीं था basic_ostream
। वहाँ एक है?
basic_ios
ctor लेनेbasic_streambuf*
से पहले आप कर सकते हैं सार्वजनिक किया गया हैusing B::B;
। मुझे उम्मीद है कि पुराने कार्यान्वयन में सिर्फ एक प्रॉक्सी ctor था:A(int x) : B(x) {}
- जो ठीक है भले हीB
ctor होprotected
।