2010-01-19 14 views
5
class Animal 
{ 
public: 
    int a; 
    double d; 
    int f(){ return 25;} 
}; 

कोड के लिए मान लीजिए कि इसके बाद के संस्करण, मैं, एक वस्तु को प्रारंभ करने का प्रयास करें new Animal() कहा, इस new() भी समारोह f() के लिए स्मृति को आबंटित करता है?क्या नया() कक्षा के कार्यों के लिए स्मृति आवंटित करता है?

दूसरे शब्दों में, मेमोरी आवंटन शर्तों में क्या अंतर है यदि मेरे पास इस कक्षा में था और new Animal() किया था?:

class Animal 
{ 
public: 
    int a; 
    double d; 
}; 

उत्तर

3

सं कार्य पाठ पेज में मौजूद हैं और इसलिए कोई जगह उनके लिए आवंटित किया जाता है।

+0

इसलिए, यदि मेरा फ़ंक्शन एक वर्चुअल फ़ंक्शन है (मेरी कक्षा सार है), तो क्या नई() को ढेर पर स्थान आवंटित करने में कोई समस्या होगी? – Moeb

+0

सभी वर्चुअल फ़ंक्शन का अर्थ यह है कि फ़ंक्शन स्थिर स्मृति में स्थित vtable में जोड़ा जाता है। प्रति वर्ग एक vtable की केवल एक प्रति है जो वर्चुअल फ़ंक्शंस का उपयोग करती है। –

+0

@Ignacio मैं इसका उत्तर ढूंढ रहा हूं: http://stackoverflow.com/questions/2091426/why-cant-we-create-objects-for-an-abstract-class-in-c मुझे लगता है कि समस्या कुछ है स्मृति आवंटन से संबंधित, लेकिन मैं इसे समझ नहीं सकता। – Moeb

7

कोई वर्चुअल फ़ंक्शन वाले क्लास के लिए, फ़ंक्शन स्वयं कोई डेटा स्थान नहीं लेता है। कार्य कोड के अनुभाग होते हैं जिन्हें डेटा में हेरफेर करने के लिए निष्पादित किया जा सकता है। यह डेटा सदस्य हैं जिन्हें आवंटित किया जाना चाहिए।

जब आपके पास वर्चुअल क्लास होता है, तो अक्सर वर्चुअल टेबल के लिए एक अतिरिक्त पॉइंटर होता है। ध्यान दें कि एक vtable एक कार्यान्वयन विशिष्ट विवरण है। हालांकि अधिकांश कंपाइलर्स उनका उपयोग करते हैं, आप हमेशा वहां पर भरोसा नहीं कर सकते हैं।

मेरे पास आपके अन्य प्रश्न पर इस उत्तर पर expanded है।

संबंधित मुद्दे

 संबंधित मुद्दे