c++ - Assigning value for a class variable -


कुछ कोड निम्नानुसार हैं:

  class A {private: int a, b ; सार्वजनिक: ए (इंट एक्स): ए (एक्स), बी (ए * ए) {} इंट एमएसीए () {वापसी; } Int getB () {वापसी b; }}; Int main () {ए एक = 13; Printf ("% d% d \ n", a.getA (), a.getB ()); वापसी 0; }  

लाइन ए एक = 13 , मैं समझ नहीं सकता कि यह कन्स्ट्रक्टर कैसे कॉल करता है और क्यों? मुझे लगता है कि कलाकारों के बारे में कोई परिभाषा नहीं है और संकलित नहीं होगी, लेकिन यह अच्छी तरह से चलता है और कन्स्ट्रक्टर फ़ंक्शन को बुलाता है।

ऐसा लगता है कि आप रूपांतरण निर्माता से अनजान हैं एक कनवर्ज़न कन्स्ट्रक्टर एक कन्स्ट्रक्टर है जो बिल्कुल एक तर्क में लेता है और उस वर्ग के ऑब्जेक्ट का निर्माण करता है। यह कुछ प्रकार से आपके वर्ग में रूपांतरण की तरह काम करता है, इसलिए नाम रूपांतरण कन्स्ट्रक्टर

अप्रत्यक्ष रूपांतरण , जो मुझे विश्वास है कि आप यहां भ्रमित हैं , तब होता है जब संकलक दो अलग-अलग प्रकार देखता है और संभव रूपांतरणों की तलाश करके उन्हें संगत बनाने की कोशिश करता है।

जैसा कि आप देख सकते हैं, अंतर्निहित रूपांतरण बहुत भ्रम का कारण बनता है (ए Int एक भी हो सकता है ?!)। इसलिए, आपको अपने वर्ग में रूपांतरण कन्स्ट्रक्टरों का सावधान रहना चाहिए और आवश्यक होने पर स्पष्ट कीवर्ड का उपयोग करें।

  स्पष्ट A (int I);  

जब आप एक रूपांतरण निर्माता को स्पष्ट के रूप में निर्दिष्ट करते हैं, तो यह संकलक को नहीं किसी भी अंतर्निहित रूपांतरण करने के लिए कहता है > इस प्रकार पर जब ऐसा होता है, तो आप केवल एक कलाकार जैसे static_cast & lt; int & gt; (a); का उपयोग करके कन्वर्ट कर सकते हैं।

पढ़ने के लिए धन्यवाद।


Comments

Popular posts from this blog

c# - SignalR: "Protocol error: Unknown transport." when navigating to hub -

Camel ProducerTemplate possible memory leak -

javascript - Adhering to a max length setting with jshint -