2012-09-03 26 views
8
class A{ 
    protected: 
    int var; 
}; 

class B{ 
    protected: 
    int var; 
}; 

class C : public A, public B {}; 

यहां क्या होता है? परिवर्तनीय विलय करते हैं? क्या मैं विशिष्ट रूप से एक को कॉल कर सकता हूं, बी :: var = 2, आदिसी ++ एक ही चर नाम के साथ एकाधिक माता-पिता

+2

क्या आपने सुझाए गए वाक्यविन्यास को भी आजमाया था ('बी :: var')? यह सही होता है! –

उत्तर

10

आप कक्षा C में दो चर, B::var और A::var होंगे। C के बाहर आप उन्हें इस तरह उपयोग कर सकते हैं (यदि आप public: करने के लिए बदल),

C c; 
c.A::var = 2; 

पहुँच c.var करने का प्रयास एक त्रुटि को बढ़ावा मिलेगा, के बाद से वहाँ नाम var, केवल A::var और B::var के साथ कोई क्षेत्र है।

C के अंदर वे A::var और B::var नामों के साथ नियमित फ़ील्ड की तरह व्यवहार करते हैं।

1

आप क्रमश: A::var और B::var द्वारा कक्षा सी में उन्हें एक्सेस कर सकते हैं।

Here एक लिंक है जो एक ही समस्या को शामिल करता है।

2

आप केवल C के अंदर var को देखें, तो संकलक पता नहीं है कि क्या आप A::var या B::var मतलब है और संकलक आपको बताएगा कि var अस्पष्ट है। इसलिए, var का उपयोग करते समय आपको नाम को पूरी तरह अर्हता प्राप्त करनी होगी।

कोई विलय नहीं होता है, C के किसी भी उदाहरण में दोनों चर शामिल होंगे।

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