2013-03-21 6 views
6

मैं इस कोड है। लेकिन, ए प्रिंट को बी उदाहरण से कॉल करने योग्य होना चाहिए। वास्तव में, यदि मैंकॉलिंग आधार वर्ग के अतिभारित विधि

bInstance.A::Print(1); 

करने के लिए कॉल बदल तो यह किसी भी त्रुटि के बिना संकलित है, लेकिन मैं वर्ग गुंजाइश ऑपरेटर हर बार लिखने के लिए होने से बचने करना चाहता था। क्या संकलक को बताने का कोई तरीका है कि मैं फ़ंक्शन के बेस क्लास के ओवरलोड को कॉल करने का प्रयास कर रहा हूं?

+2

ओवरलोड रिज़ॉल्यूशन 'ए' खोजने से पहले किया जाता है क्योंकि इसे' बी' में कुछ मिलता है। 'ए' लाने के लिए 'उपयोग' कथन का उपयोग करें और इसे ओवरलोड रिज़ॉल्यूशन में भाग लें। – chris

+0

यदि मैं विनम्रता से सुझाव दे सकता हूं कि अधिभार की उपयोगिता कभी-कभी कुछ हद तक अतिरंजित होती है। इसके बजाय अलग-अलग नामों का उपयोग करने पर विचार करें, जैसे 'शून्य प्रिंटइन्ट (int i);' और 'शून्य प्रिंटस्ट्रिंग (स्ट्रिंग एस);' – bobobobo

उत्तर

11
अपने उपवर्ग खाल सदस्य समारोह सुपर क्लास की Print() में

Print() सदस्य कार्य करते हैं। इसलिए, कंपाइलर A::Print() नहीं देख पाएगा और B::Print() को आमंत्रित करने का प्रयास करेगा, यह शिकायत करेगा कि int को स्ट्रिंग में परिवर्तित नहीं किया जा सका।

class A { 
public: 
    void Print(int i) {cout<<i;} 
}; 

class B : public A { 
public: 
    using A::Print; 
// ^^^^^^^^^^^^^^^ 
    void Print(string s) {cout<<s;} 
}; 

अपने कोड आवश्यक संशोधनों के बाद काम करने का एक live example है:

अधिभार सेट में A::Print() लाने के लिए, यदि आप एक using घोषणा को लागू कर सकते हैं।

+0

उस पंक्ति को जोड़ा गया, अब यह 'त्रुटि देता है: शून्य ए :: प्रिंट (int) पहुंच योग्य नहीं है। – Mic

+1

@ मिक, इसे 'सार्वजनिक' में रखें, 'बी' का हिस्सा। मुझे लगता है कि आपने इसे अपने 'सार्वजनिक: शून्य प्रिंट (स्ट्रिंग एस) {cout << s;}' लाइन से पहले जोड़ा है, जो इसे निजी बना देगा। – chris

+0

मैंने 'ए :: प्रिंट' कथन का उपयोग करके 'सार्वजनिक' हिस्सा नहीं देखा, आपका उत्तर स्पष्ट और सटीक रहा है, धन्यवाद! – Mic

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