संभव डुप्लिकेट:
Private virtual method in C++सी ++: निजी आभासी कार्यों बनाम शुद्ध आभासी कार्यों
अगर मैं इस पोस्ट (Private virtual method in C++) से सही ढंग से समझ में आया, एक आधार वर्ग में एक आभासी समारोह बनाने व्युत्पन्न कक्षाएं इसे ओवरराइड करने में सक्षम बनाती हैं। लेकिन ऐसा लगता है कि चीजें वहां रुकती हैं।
लेकिन यदि बेस क्लास वर्चुअल फ़ंक्शन शुद्ध है, तो व्युत्पन्न कक्षाओं को फ़ंक्शन को लागू करने के लिए मजबूर करता है। इसलिए, एक शुद्ध (सार्वजनिक) वर्चुअल फ़ंक्शन केवल एक इंटरफ़ेस है। मैं यहां एक लाभ देख सकता हूं।
दूसरी तरफ, बेस क्लास वर्चुअल फ़ंक्शन निजी बनाकर, केवल व्युत्पन्न वर्ग को फ़ंक्शन को ओवरराइड करने की क्षमता देता है, लेकिन मुझे इसका कोई फायदा नहीं होता है। ऐसा लगता है कि वह निजी वर्चुअल फ़ंक्शन भी वहां नहीं है। व्युत्पन्न वर्ग स्पष्ट रूप से बेस क्लास में उस वर्चुअल फ़ंक्शन के अस्तित्व के बारे में नहीं जानता है क्योंकि इसका निजी, तो विरासत या बहुरूपता की अवधि में बेस क्लास निजी फ़ंक्शन वर्चुअल घोषित करने का कोई लाभ है?
इसके अलावा, क्या कोई ऐसी स्थिति है जहां बेस क्लास एक 'शुद्ध आभासी' और 'निजी' कार्य घोषित करेगी?
धन्यवाद।
यदि आप जानते हैं कि आपको व्युत्पन्न कक्षाओं से मूल विधि तक पहुंचने की आवश्यकता नहीं है तो इसे सुरक्षित क्यों घोषित करें? आप इसे कॉल करने में सक्षम होने के बिना कुछ ओवरराइड कर सकते हैं। –
http://www.parashift.com/c++-faq-lite/private-virtuals.html – Samson
कोई कारण नहीं * इसे * संरक्षित 'घोषित किया जाना चाहिए। अगर आपको 'संरक्षित' की ज़रूरत है, तो इसका इस्तेमाल करें। यदि नहीं, तो 'निजी' का उपयोग करें। – juanchopanza