/ / फिर से एक संरचना के सदस्यों को पुनः आरंभ करें - c ++, आरंभीकरण, दृश्य- c ++ - 2008

एक स्ट्रक्चर के सदस्यों को फिर से शुरू करें - सी ++, प्रारंभिकरण, विज़ुअल-सी ++ - 2008

यह एक संरचना बनाने और शुरू करने में आसान है ...

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