2012-01-24 10 views
7

0 किसी अन्य वर्ग में कक्षा को परिभाषित करना और सरणी के लिए इसका उपयोग करना संभव है? उदाहरण के लिए:किसी अन्य वर्ग के भीतर कक्षा को परिभाषित करने के लिए कैसे करें C++

class a 
{ 
    public: 
    private: 
    class b; 
    b myarray[10]; 

    class b 
    { 
     public: 
     b(int a):a_val (a){} 
     private: 
     int a_val; 
    }; 
}; 

की उपेक्षा कर जनता, क्या मेरी वाक्य रचना के साथ गलत क्या है?

बी के निजी मूल्यों को संशोधित करने के लिए ए में सदस्य कार्य करना भी संभव है। उदाहरण के लिए, myarray [0] .a_val = 5; यदि हां, तो क्या यह वाक्यविन्यास भी सही है?

+0

आप 'बी' के निर्माता हैं 'ए' नामक' int 'तर्क है लेकिन आपके पास' a' नामक एक कक्षा भी है। यह भ्रामक है। – Foggzie

उत्तर

0

हां आप अन्य कक्षाओं के भीतर निजी रूप से कक्षाएं घोषित कर सकते हैं।

हां, आप उन्हें एक सरणी के प्रकार के रूप में उपयोग कर सकते हैं बशर्ते कक्षा स्वयं आपको दिखाई दे जहां आप सरणी बनाते हैं।

0

नहीं, यह पूरी तरह से ठीक है। यह सिर्फ मतलब है कि आप केवल वर्ग एक के भीतर ख के उदाहरण घोषणा कर सकते हैं, जो ऐसा करने से लोगों को बंद हो जाएगा:

a::b myB; 

अपने स्वयं के ख है, जो संभवतः आप क्या चाहते है की घोषणा करने के।

5

नहीं, एक निजी नेस्टेड कक्षा को परिभाषित करने के लिए आपका वाक्यविन्यास ठीक है। हालांकि कुछ अन्य चीजें गलत हैं: आपको इसे सरणी बनाने से पहले b को परिभाषित करने की आवश्यकता है। प्रकार को पूरा करने की जरूरत है।

b डिफ़ॉल्ट रचनात्मक नहीं है, इसलिए आपको a कन्स्ट्रक्टर प्रारंभकर्ता सूची में सरणी को प्रारंभ करने की भी आवश्यकता है, जो वास्तव में C++ 03 में संभव नहीं है। सी ++ 11 उस कार्यक्षमता को प्राप्त करने के लिए प्रारंभकर्ता सूचियों की पेशकश करता है।

बस std::vector या std::array का उपयोग करें।

अपने कोड की फिक्स्ड संस्करण:

class a 
{ 
public: 
    // ATTN C++11 feature here 
    a() : myarray({ 1, 2}) {} 
private: 
    class b { 
    public: 
    b(int a) : a_val (a){} 
    int a_val; 
    }; 
    b myarray[2]; 
}; 
int main() 
{ 
    a a; 
} 
2

हाँ, यह ठीक है, लेकिन आप पूरी तरह से यह की एक सरणी की घोषणा से पहले नेस्टेड वर्ग को परिभाषित करने के लिए है: सरणी केवल पूरा प्रकार के बनाया जा सकता है:

class Outer 
{ 
    class Inner { /* define it! */ }; 
    Inner a[100]; 
}; 
संबंधित मुद्दे

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