मैं समझने के लिए सी ++ के साथ प्रयोग कर रहा हूं कि कक्षा/संरचनाओं और उनकी संबंधित वस्तुओं को स्मृति में कैसे रखा गया है और मुझे समझ में आया कि कक्षा/संरचना का प्रत्येक क्षेत्र उनके संबंधित ऑब्जेक्ट में ऑफसेट है (इसलिए मेरे पास एक सदस्य परिवर्तनीय सूचक हो सकता है)।किसी ऑब्जेक्ट के लिए सदस्य फ़ंक्शंस कहां संग्रहीत होते हैं?
मैं क्यों समझ में नहीं आता, मैं सदस्य समारोह संकेत हो सकता है, भले ही, निम्नलिखित कोड काम नहीं करता:
struct mystruct
{
void function()
{
cout << "hello world";
}
int c;
};
int main()
{
unsigned int offset_from_start_structure = (unsigned int)(&((mystruct*)0)->c);
unsigned int offset_from_start_structure2 = (unsigned int)(&((mystruct*)0)->function); // ERROR - error C2276: '&' : illegal operation on bound member function expression
return 0;
}
मेरा प्रश्न है: क्यों लाइन करता
unsigned int offset_from_start_structure = (unsigned int)(&((mystruct*)0)->c);
संकलन और मुझे संरचना की शुरुआत से "सी" फ़ील्ड का ऑफसेट देता है और लाइन
unsigned int offset_from_start_structure2 = (unsigned int)(&((mystruct*)0)->function);
डी संकलित भी नहीं है?
सदस्य कार्य वस्तुओं में संग्रहित नहीं होते हैं (वे क्यों होंगे? वे उस प्रकार की सभी वस्तुओं के लिए समान हैं)। और अगर यह मदद करता है (शायद नहीं; शायद यह केवल भ्रम जोड़ता है लेकिन मैं वैसे भी कोशिश करूंगा) सदस्य फ़ंक्शन पॉइंटर्स * नहीं * पॉइंटर्स हैं। –
क्या आप स्मृति में _function_ की सामग्री की अपेक्षा कर रहे थे? कार्य डेटा नहीं हैं। वे कोड हैं। –
"मैं समझने के लिए सी ++ के साथ प्रयोग कर रहा हूं कि स्मृति/वर्ग और उनकी संबंधित वस्तुओं को स्मृति में कैसे रखा गया है" कार्यान्वयन विवरण, भाषा –