2011-07-26 11 views
6

उत्पन्न करें मैं अक्सर सी-स्टाइल structs के बजाय बहुत ही सरल कक्षाएं लिखता हूं। वे आम तौर पर इस तरह दिखते हैं:सी ++ मानक कन्स्ट्रक्टर

class A 
{ 
public: 
    type mA; 
    type mB; 
    ... 
    A(type mA,type mB,...) : mA(mA),mB(mB),... {} 
} 

क्या यह चीजों को करने का एक समझदार तरीका है? यदि हां, तो मैं सोच रहा था कि वहां कोई तीसरी पार्टी प्लगइन है या कन्स्ट्रक्टर के लिए पाठ को स्वचालित रूप से बनाने के लिए कोई आसान शॉर्ट कट था (उदाहरण के लिए हाइलाइट किए गए या मौजूदा सदस्य परिभाषाएं लें, अल्पविरामों को अल्पविरामों से प्रतिस्थापित करें, एक ही पंक्ति पर सब कुछ ले जाएं, ...)? धन्यवाद

+2

जैसा कि एक स्टाइल नोट के रूप में है, मैं इसे सभी को एक पंक्ति पर रखने की अनुशंसा नहीं करता हूं। एक बार जब आप 2-3 से अधिक गुण प्राप्त कर लेते हैं तो यह अनावश्यक हो जाएगा। इसके बजाए, प्रत्येक प्रारंभकर्ता और शायद प्रत्येक पैरामीटर को अपनी लाइन पर रखें। इससे नई वस्तुओं को जोड़ना आसान हो जाता है, वे किसी भी स्रोत नियंत्रण diff में स्पष्ट रूप से दिखाई देते हैं, और यह संभवतः कोड को पढ़ने में आसान बनाता है (याद रखें कि कोड आमतौर पर लिखता है-एक बार, पढ़ने-कई)। –

+0

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

उत्तर

11

हाँ, बस सादा समुच्चय का उपयोग करें: लेकिन यह की तरह लग रहा बहुत सारे अनुकूलन के लिए। उदाहरण के लिए ब्रेस सिंटैक्स के साथ कुल प्रारंभिक आमतौर पर सदस्यों को एक प्रतिलिपि के बिना जगह में बना देता है। इसके अलावा आपको सबसे अच्छा संभव प्रतिलिपि मिलती है और कंपाइलर द्वारा आपके लिए परिभाषित कन्स्ट्रक्टर और असाइनमेंट ऑपरेटरों को स्थानांतरित करती है।

+0

के रूप में संकलित नहीं करता है यह केवल तभी काम करता है जब उसे विनाशक की आवश्यकता नहीं होती –

+0

ओपी ने कहा "बहुत सरल वर्ग"। एक विनाशक की आवश्यकता निश्चित रूप से गैर-साधारण वर्ग की पहचान होगी! :-) –

+0

@ जेफ: ओपी का उल्लेख है कि वह सी-स्टाइल structs के लिए यह कर रहा है। तो आप इसे पेश कर सकते हैं। –

1

संपादित करें: पिछले संस्करण सी 99 था, सी ++ नहीं। अब यह सी ++

मुझे लगता है कि आप कन्स्ट्रक्टर लिखने के बजाय {} प्रारंभिकरण का उपयोग कर सकते हैं। या यह सी ++ 0x में है? c99? मुझे यकीन नहीं है।

struct A 
{ 
    type mA; 
    type mB; 
    ... 
}; 

उपयोग::

A x = { mA, mB, ... }; 

एक समग्र कोई कस्टम कंस्ट्रक्टर्स, नाशक और असाइनमेंट ऑपरेटर, और यह अनुमति देता है

struct A myA = { 3, 5}; 
+1

@Ali: हुह, आप इसे हटा सकते हैं फिर? या इसे सुधारो? –

+0

मत सोचो; वास्तव में इसका परीक्षण करें। पीएस यह C++ –

0

मैं कहूंगा कि यह करने का एक समझदार तरीका था हालांकि ओओ कट्टरपंथी आपके पास encapsulation की कमी पर टिप्पणी कर सकते हैं। मुझे पता है कि विजुअल स्टूडियो में कोड स्निपेट हैं, जिनमें आप आधे नौकरी की तलाश कर रहे हैं, लेकिन यह आपके आईडीई

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