2012-11-06 15 views
6

संभव डुप्लिकेट:
Default constructor with empty bracketsनिर्माता मुद्दा

इस कोड है कि मैं पर काम किया है और मुझे समझ नहीं आता क्या यह (निर्माता पैकेज obj2 पर हो रहा है); उत्पादन पर प्रदर्शित किए जाते हैं केवल मूल्यों 4 (पैकेज obj1 (4)) और 2 (पैकेज obj3 (2))

#include <iostream> 
using namespace std; 
class Package 
{ 
private: 
    int value; 
public: 
    Package() 
    { 
     cout<<"constructor #1"<<endl; 
     value = 7; cout << value << endl; 

    } 
    Package(int v) 
    { 
     cout<<"constructor #2"<<endl; 
     value = v; cout << value << endl; 

    } 
    ~Package() 
    { 
     cout<<"destructor"<<endl; 
     cout << value << endl; 
    } 
}; 

int main() 
{ 
    Package obj1(4); 
    Package obj2(); 
    Package obj3(2); 

} 

उत्तर

4

लाइन

Package obj2(); 

Package obj2; 

अधिक जानकारी

http://www.parashift.com/c++-faq/empty-parens-in-object-decl.html

या इस पर, विकल्प ले (गूगल कैश से, असली साइट नीचे था होने की जरूरत है, और इसे नमक के अनाज से लें, यह अच्छे अंक उठाता है लेकिन यह सबसे अच्छा करता है उन्हें अधिक खराब हो की तुलना में वे कर रहे हैं) बनाने के लिए:

http://webcache.googleusercontent.com/search?q=cache:http://yosefk.com/c%2B%2Bfqa/ctors.html#fqa-10.2

+0

मैंने कारण दिया, आपने तय किया! –

+0

डिफ़ॉल्ट नियंत्रक को कॉल करते समय '()' की आवश्यकता नहीं है –

+1

@EmmanuelN यह सिर्फ "आवश्यकता नहीं है", यह "उपयोग नहीं करना चाहिए" है। – hyde

8

यह एक वस्तु की घोषणा नहीं करता:

Package obj2(); 

मानो या न मानो, यह एक फ़ंक्शन घोषित करता है जो Package ऑब्जेक्ट देता है। इसे "most vexing parse" कहा जाता है। "

4

आप सी ++ 11 उपयोग कर रहे हैं, और 'सबसे अप्रिय पार्स' समस्या का समाधान चाहते हैं, आप की जगह ले सकता

Package obj2(); 

Package obj2{}; 

के साथ यह 11 वर्ष की uniform initialization syntax सी ++, जो मुख्य रूप से इस समस्या को हल प्राप्त करने के लिए डिजाइन किया गया था का हिस्सा है।