मैं कोडप्रोजेक्ट पर डॉन क्लुगस्टन द्वारा article के माध्यम से जा रहा था। यह एक सुंदर लेख है और काफी प्रसिद्ध है।फंक्शन पॉइंटर्स
class A {
public:
virtual int Afunc() { return 2; };
};
class B {
public:
int Bfunc() { return 3; };
};
// C is a single inheritance class, derives only from A
class C: public A {
public:
int Cfunc() { return 4; };
};
// D uses multiple inheritance
class D: public A, public B {
public:
int Dfunc() { return 5; };
};
टुकड़ा निम्नलिखित पैराग्राफ द्वारा पीछा किया जाता:
मान लीजिए हम वर्ग सी में के लिए एक सदस्य समारोह सूचक बनाने के निम्नलिखित कोड का टुकड़ा में, मैं समझने के लिए एक विशेष धारणा बहुत मुश्किल पाया यह उदाहरण, अफुनक और सीएफएनसी दोनों सी के सदस्य कार्य हैं, इसलिए हमारे सदस्य फ़ंक्शन पॉइंटर को Afunc या Cfunc को इंगित करने की अनुमति है। लेकिन अफुनक को इस सूचक की आवश्यकता है जो सी :: ए (जिसे मैं एथिस कहूंगा), को इंगित करता है जबकि सीएफएनसी को इस पॉइंटर की आवश्यकता होती है जो सी को इंगित करती है (जिसे मैं सीथिस कहूंगा)। कंपाइलर लेखक इस स्थिति से एक चाल से निपटते हैं: वे सुनिश्चित करते हैं कि ए को सी की शुरूआत में शारीरिक रूप से संग्रहीत किया जाता है। इसका मतलब है कि एथिस == कैथिस। हमारे पास चिंता करने के लिए केवल एक ही है, और दुनिया के साथ अच्छी तरह से है।
एकमात्र चीज जिसे मैं समझना चाहता हूं वह उपरोक्त अनुच्छेद में बोल्ड और इटालिक्स में रेखा है।
मैं पूरी तरह से समझ में नहीं आता Afunc सेल्सियस के लिए एक सूचक की जरूरत :: जबकि एक Cfunc सी के लिए सूचक की जरूरत काफी स्वाभाविक है।
किसी भी मदद की सराहना की जाएगी।
क्या आप अंतिम वाक्य को फिर से लिख सकते हैं? – msiyer
@msiyer मैंने अधिक जानकारी जोड़ने का प्रयास किया है, उम्मीद है कि यह थोड़ा स्पष्ट है। –
यह एक महान स्पष्टीकरण है। मैं एक मैकेनिकल इंजीनियरिंग स्नातक हूं और इस प्रकार, किसी भी सीएस पाठ्यक्रम नहीं लिया है। मैं, अब, इसे अपने आप कर रहा हूँ। कंपाइलर डिज़ाइन और निर्माण में ठोस पैर रखने के लिए आवश्यक सभी को सीखना। इन तरह के उत्तरों के साथ, कोई वास्तव में सीएस औपचारिक शिक्षा को बहुत याद नहीं कर सकता है। धन्यवाद Konrad। – msiyer