क्षमा करें।सरणी वस्तुओं जटिल खिताब के लिए
class Base
{
public:
int SomeMember;
Base() : SomeMember(42) {}
virtual int Get() { return SomeMember; }
};
class ChildA : public Base
{
public:
virtual int Get() { return SomeMember*2; }
};
class ChildB : public Base
{
public:
virtual int Get() { return SomeMember/2; }
};
class ChildC : public Base
{
public:
virtual int Get() { return SomeMember+2; }
};
Base ar[] = { ChildA(), ChildB(), ChildC() };
for (int i=0; i<sizeof(ar)/sizeof(Base); i++)
{
Base* ptr = &ar[i];
printf("El %i: %i\n", i, ptr->Get());
}
कौन सा आउटपुट:
El 0: 42
El 1: 42
El 2: 42
यह सही व्यवहार है (वीसी ++ 2005 में) मैं कुछ इस तरह है? पूरी तरह से ईमानदार होने के लिए, मुझे उम्मीद है कि इस कोड को संकलित नहीं किया जाए, लेकिन ऐसा हुआ, हालांकि यह मुझे आवश्यक परिणाम नहीं देता है। क्या ये संभव भी है?
* ऑब्जेक्ट टुकड़ा करने की क्रिया *, के रूप में यह जाना जाता है। – john
तो यह अपने VTables कॉपी किए बिना ऑब्जेक्ट्स की प्रतिलिपि बना रहा है? – GhassanPL
@ क्रोनिकारज़: यह उन पर अन्य वर्गों की सामग्री की प्रतिलिपि बनाकर 'कक्षा व्युत्पन्न' की वस्तुओं को आरंभ करता है। बेशक यह vtables की प्रतिलिपि नहीं है - वे अपरिवर्तनीय हैं। – sharptooth