2010-03-26 8 views
5
class CRectangle { 
    int x, y; 
    public: 
    void set_values (int,int); 
    int area (void); 
    } rect; 

इस उदाहरण में के बीच नाम, क्या समापन ब्रेस के बाद और सेमी-कोलन के बीच 'रेक्ट' इस वर्ग परिभाषा क्या मतलब है? मुझे एक स्पष्ट स्पष्टीकरण खोजने में परेशानी हो रही है। इसके अलावा: जो भी हो, क्या आप इसे structs के लिए भी कर सकते हैं?कक्षा घोषणा भ्रम - समापन ब्रेस और सेमी-कोलन

उत्तर

10

rect एक चर (इस मामले में एक वस्तु) का नाम है।

यह बिल्कुल के रूप में अगर यह कहा था है: एक नए प्रकार की एक परिभाषा है

int rect; 
int के बजाय छोड़कर

एक CRectangle कहा जाता है। आमतौर पर, वर्ग प्रकार अलग से घोषित किया गया है और जैसा कि आप शायद से परिचित हैं तो के रूप में

CRectangle rect; 

इस्तेमाल किया है, लेकिन यह उस तरह एक घोषणा के हिस्से के रूप एक नए प्रकार की घोषणा करने के लिए पूरी तरह से कानूनी है।

और हाँ, यह structs के लिए काम करता है:

struct { int x, y; } rect; 
:

struct SRectangle { int x, y; } rect; 

वास्तव में तुम भी आप इसे फिर से उपयोग करने की योजना नहीं है, तो प्रकार एक नाम देने की जरूरत नहीं है

जिसे "अज्ञात संरचना" कहा जाता है (और यह कक्षाओं के लिए भी काम करता है)।

+0

यह एक "अज्ञात संरचना" है, न कि "अज्ञात संरचना"। सी ++ में अज्ञात structs नहीं है। Http://stackoverflow.com/questions/2253878/why-does-c-disallow-unnamed-structs-and-unions देखें –

2

यह प्रकार CRectangle कि वैश्विक है या संदर्भ के आधार पर एक namespace के अंतर्गत आता है की एक वस्तु है।

+0

या कक्षा या स्थानीय क्षेत्र। – kennytm

1

यह एक उदाहरण घोषित करता है। बस की तरह है:

कोई

1

एक और structs और के बीच फर्क सिर्फ इतना है (पहुँच विनिर्देशक और विरासत के संबंध में) जनता के लिए एक class और C++ एक struct, के बीच अंतर को छोड़कर struct डिफ़ॉल्ट है कक्षाएं हैं कि structs के पास सार्वजनिक डिफ़ॉल्ट विरासत है और पहुंच और कक्षाएं दोनों के लिए डिफ़ॉल्ट रूप से निजी का उपयोग करती हैं।

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