दो निम्नलिखित कक्षाएं ले:
class test1 {public: test1 () = डिफ़ॉल्ट; टेस्ट 1 (चार में 1, चार इन 2): चार 1 (इन 1), चार 2 (इन 2) {} char char1; Char char2; }; कक्षा परीक्षण 2 {सार्वजनिक: टेस्ट 2 () = डिफ़ॉल्ट; टेस्ट 2 (चार में 1, चार इन 2): चार 1 (इन 1), चार 2 (इन 2) {} निजी: चार चार 1; Char char2; }; मुझे सी ++ 0x में पता है कि इन दोनों वर्गों को पीओडी प्रकार के रूप में माना जाता है और हम निम्न के रूप में प्रारंभिक सूची का उपयोग करके उन वस्तुओं को आरंभ कर सकते हैं:
Test1 obj1 = {'a', 'b'}; // वैध में c ++ 0x test2 obj2 = {'a', 'b'}; // वैध में c ++ 0x लेकिन मुझे आश्चर्य है कि तकनीकी कारण यह है कि जब हमारे पास नीचे की तरह एक कक्षा में अलग-अलग एक्सेस विनिर्देशक होते हैं, तो उस वर्ग के ऑब्जेक्ट्स को आरम्भ करने के लिए प्रारंभिक सूची का उपयोग करना संभव नहीं है और उस वर्ग को पीओडी प्रकार के रूप में नहीं माना जाता है?
कक्षा परीक्षण {सार्वजनिक: टेस्ट () = डिफ़ॉल्ट; टेस्ट (चार में 1, चार में 2): चार 1 (इन 1), चार (2) (2) {} char चार 1; निजी: char char2; }; Test obj = {'a', 'b'}; // c ++ 0x अमान्य में यदि आप पीओडी की परिभाषा c ++ 0x में नहीं जानते हैं :
एक वर्ग / स्ट्रैट को पीओडी माना जाता है अगर यह तुच्छ, मानक-लेआउट, और यदि इसके सभी गैर-स्थिर सदस्य पीओडी हैं।
एक तुच्छ वर्ग या संरचना एक के रूप में परिभाषित किया गया है:
- एक तुच्छ डिफ़ॉल्ट कन्स्ट्रक्टर है यह डिफ़ॉल्ट कन्स्ट्रक्टर सिंटैक्स (SomeConstructor () = डिफ़ॉल्ट;) का उपयोग कर सकता है।
- एक तुच्छ कॉपी निर्माता है, जो डिफ़ॉल्ट सिंटैक्स का उपयोग कर सकता है।
- एक तुलनीय कॉपी असाइनमेंट ऑपरेटर है, जो डिफ़ॉल्ट सिंटैक्स का उपयोग कर सकता है।
- एक तुच्छ डिस्ट्रक्टर है, जो वर्चुअल नहीं होना चाहिए।
मानक-लेआउट क्लास या स्ट्रेट को एक के रूप में परिभाषित किया गया है: < / P>
- केवल गैर-स्टैटिक डेटा सदस्य हैं जो मानक-लेआउट प्रकार के होते हैं
- सभी गैर-स्थिर सदस्यों के लिए समान एक्सेस कंट्रोल (सार्वजनिक, निजी, संरक्षित) है
- कोई वर्चुअल फ़ंक्शंस नहीं है
- कोई आभासी बेस क्लास नहीं है
- केवल आधार वर्ग हैं जो मानक-लेआउट प्रकार के हैं
- कोई आधार वर्ग नहीं है पहले परिभाषित गैर-स्थिर सदस्य के रूप में एक ही प्रकार का
- या तो कोई गैर-स्थिर सदस्य के साथ कक्षाएं नहीं हैं, या इसमें सबसे व्युत्पन्न वर्ग में और अधिकतर एक आधार वर्ग में कोई भी गैर-स्थिर डेटा सदस्य नहीं है गैर-स्थिर सदस्य संक्षेप में, इस वर्ग के पदानुक्रम में केवल एक ही वर्ग हो सकता है जिसमें गैर-स्थिर सदस्य हैं।
यदि आप नहीं जानते कि एक तुच्छ कन्स्ट्रक्टर या ऑपरेटर क्या है:
कंपाइलर कक्षा के लिए निम्नलिखित प्रत्येक आइटम में से एक तुच्छ को उत्पन्न करता है, अगर यह उपयोगकर्ता द्वारा घोषित नहीं किया जाता है: कन्स्ट्रक्टर, डिस्ट्रक्टर और प्रतिलिपि असाइनमेंट ऑपरेटर कॉपी करें।
और अगर क्लासर के लिए कोई उपयोगकर्ता-घोषित कन्स्ट्रक्टर भी नहीं है, तो उस वर्ग के लिए एक तुच्छ डिफ़ॉल्ट कन्स्ट्रक्टर उत्पन्न होता है, अगर कोई भी उपयोगकर्ता-घोषित कन्स्ट्रक्टर आप अपनी खुद की तुच्छ डिफ़ॉल्ट कन्स्ट्रक्टर बनाने के लिए सिंटैक्स (कुछकॉन्स्ट्रस्ट्रक्टर () = डिफ़ॉल्ट;) का उपयोग कर सकते हैं।
"तकनीकी" कारण निम्नलिखित कारण है:
समान अभिगम नियंत्रण वाले एक (गैर-यूनियन) वर्ग के गैर-स्थिर डेटा सदस्यों को आवंटित किया जाता है ताकि बाद के सदस्यों के पास उच्च पते हों क्लास ऑब्जेक्ट के भीतर अलग-अलग अभिगम नियंत्रण वाले गैर-स्थिर डेटा सदस्यों के आवंटन का क्रम अनिर्दिष्ट है (सी ++ 0x § 9.2 / 12)।
इतने लंबे समय के रूप में सभी nonstatic डेटा सदस्यों के एक ही उपयोग नियंत्रण है, उनके आदेश अच्छी तरह से निर्दिष्ट है; अन्यथा उनके आदेश अनिर्दिष्ट हैं।
Comments
Post a Comment