यह एक संरचना बनाने और शुरू करने में आसान है ...
struct S{ int x; bool b; };
S s = {123,false};
लेकिन क्या किसी मौजूदा वस्तु पर एक ही चाल का उपयोग करना संभव है? या यह केवल 1 बार की बात है?
S s = {123,false};
s = {456,true}; //fails
s = S(){456,true}; //fails
वहाँ एक वाक्यविन्यास चाल है ... जाहिर है मैं कर सकता है:
S s = {123,false};
S temp={456,true};
s = temp;
लेकिन क्या मैं स्पष्ट रूप से घोषणा को हटा सकता हूं temp
चर?
मुझे VC + 2008 पर काम करना चाहिए, इसलिए कोई फैंसी आधुनिक C ++ सामान उपलब्ध नहीं है:
उत्तर:
जवाब के लिए 3 № 1सं। प्रारंभ एक बार होने वाली घटना है। प्रारंभ केवल तब होता है जब आप बनाते हैं और साथ ही साथ बनाए गए ऑब्जेक्ट पर कुछ मान निर्दिष्ट करते हैं (यानी, एक कथन 0 में।
एक बार ऑब्जेक्ट बन जाने के बाद आप केवल इसे नए मान दे सकते हैं
संक्षेप में,
आप C ++ में किसी भी चीज़ को पुन: स्थापित नहीं कर सकते। आप ऑब्जेक्ट को इनिशियलाइज़ कर सकते हैं या उन्हें असाइन कर सकते हैं।
एक बार जब आप इस तथ्य को समझ जाते हैं, तो आप देख सकते हैं कि इस तरह के समाधानों की संख्या संभव है
- कंस्ट्रक्टर के लिए स्ट्रक्चर मेंबर्स को पास करना और स्ट्रक्चर ऑब्जेक्ट बनाना
- ओवरलोडिंग
=
आप जो चाहें करने के लिए ऑपरेटर
जवाब के लिए 2 № 2
आप अपनी संरचना में एक निर्माता जोड़ सकते हैं और फिर आप कुछ ऐसा कर सकते हैं:
struct S
{
S(int x_in, bool b_in): x(x_in), b(b_in) { }
int x;
bool b;
}
S s(123, false);
s = S(456, true);
उत्तर № 3 के लिए 1
सी ++ 11 में आप कर सकते हैं:
s = S({456, true});
उत्तर के लिए 1 № 4
C ++ 11 में, आप एक शुरुआती सूची से एक अस्थायी निर्माण कर सकते हैं और असाइनमेंट ऑपरेटर के साथ इसका उपयोग कर सकते हैं। इस प्रकार आप लिख सकते हैं:
struct S {
int x;
bool b;
};
int main()
{
S s = {42, true};
s = {0, false};
}
जवाब के लिए 0 № 5
मुझे नहीं लगता कि संरचना डिफ़ॉल्ट रूप से पुनः आरंभ का समर्थन करेगी।
S s = {123,false};
S temp={456,true};
s = temp; //calls the = operator
शायद आप कोशिश कर सकते हैं असाइनमेंट ऑपरेटर को ओवरलोड करना
या आप मक्खी पर अस्थायी बनाने की कोशिश कर सकते हैं।
S s = {123,false};
s = S (456,true); // this should work i suppose