2012-07-20 12 views
5

होने यह मेरा नमूना कोड है:आरंभिक सूची के माध्यम से किसी अन्य वर्ग के कन्स्ट्रक्टर को कॉल करना। समस्याओं

#include <iostream> 
using namespace std; 

class Base 
{ 
public: 
    Base (int v, char z) {x=v;y=z;}; 
    int x; 
    char y; 
}; 

class Bar 
{ 
public: 
    Bar(int m, char n):q(m),s(n),base(q,s){}; 
    Base base; 
    int q; 
    char s;  
}; 

int main() 
{ 
    Bar barObj(5,'h');  
    cout << barObj.base.x << barObj.base.y << endl;  
    return 0; 
} 

मैं क्यों 0 का उत्पादन मिल रहा है? http://ideone.com/pf47j

इसके अलावा, सामान्य रूप में, क्या सही विधि किसी अन्य वर्ग में एक सदस्य उद्देश्य यह है कि वस्तु के निर्माता बना सकते हैं और कॉल करने के लिए, के रूप में class Base की वस्तु आधार के साथ ऊपर किया गया था, class Bar अंदर है?

+0

'आधार आधार;' आधार आधार (int v, char z); '। एक उचित किताब पढ़ें। –

+0

आपके लिंक में कोड – mathematician1975

+0

से ऊपर के कोड से अलग है, बिल्ली प्लस प्लस के अलावा, आपको 'm' और' n' का उपयोग करने की आवश्यकता है। 'आधार' बनाने से पहले 'q' और' s' प्रारंभ नहीं किया गया है। – IronMensan

उत्तर

6

डेटा सदस्यों का प्रारंभिक क्रम उनके घोषणा आदेश का पालन करता है, न कि आप अपने प्रारंभकर्ता को सूचीबद्ध करते हैं। इस प्रकार, Bar::base हमेशा Bar::q और Bar::s से पहले प्रारंभ किया जाता है।
http://ideone.com/M6iKR में Bar::Bar(int m, char n) के लिए दिखाया गया है, basem और n का उपयोग करके ठीक काम करता है।

+1

का पुराना संस्करण नहीं देता है जब आप 'm का उपयोग करते हैं, 'q, s' के बजाय n ', ऑर्डर कोई फर्क नहीं पड़ता। –

+0

धन्यवाद मैंने अभी क्यू और एस के नीचे बार :: आधार की घोषणा को स्थानांतरित कर दिया है। – user1084113

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