में ओवरराइडिंग फ़ंक्शन जावा और सी ++ में दो समान परिभाषाएं, लेकिन पूरी तरह से अलग व्यवहार।जावा बनाम सी ++
जावा संस्करण:
class base{
public void func1(){
func2();
}
public void func2(){
System.out.println(" I am in base:func2() \n");
}
}
class derived extends base{
public void func1(){
super.func1();
}
public void func2(){
System.out.println(" I am in derived:func2() \n");
}
};
public class Test
{
public static void main(String[] args){
derived d = new derived();
d.func1();
}
}
उत्पादन:
I am in derived:func2()
सी ++ संस्करण:
#include <stdio.h>
class base
{
public:
void func1(){
func2();
}
void func2(){
printf(" I am in base:func2() \n");
}
};
class derived : public base
{
public:
void func1(){
base::func1();
}
void func2(){
printf(" I am in derived:func2() \n");
}
};
int main()
{
derived *d = new derived();
d->func1();
return 0;
}
उत्पादन:
I am in base:func2()
मुझे नहीं पता कि उनके पास अलग-अलग व्यवहार क्यों हैं।
यहां तक कि मुझे पता है कि जावा में ऑटो पॉलिमॉर्फिज्म व्यवहार है।
जावा आउटपुट व्यक्तिगत रूप से समझना मुश्किल है।
मेरी नजर में, static scope
के अनुसार, आधार वर्ग समारोह func1()
केवल, आधार वर्ग समारोह func2()
कॉल करने के लिए के रूप में यह बिल्कुल व्युत्पन्न वर्ग के बारे में कुछ नहीं जानता सक्षम होना चाहिए। अन्यथा कॉलिंग व्यवहार dynamic scope
से संबंधित है। शायद सी ++ में, func2()
बेस क्लास में static
बाध्य है, लेकिन जावा में यह dynamic
बांधता है?
सदस्य क्षेत्र स्थिर रूप से स्कॉप्ड है।
प्रकार का हिस्सा भाग भ्रमित कर रहा है। मैंने सोचा this
में base::func1()
में परिवर्तित किया गया है। सी ++ में, base::func2()
पॉलिमॉर्फिज्म नहीं है, इसलिए base::func1()
कहा जाता है। जावा में रहते हुए, base::func2()
पॉलिमॉर्फिज्म है, इसलिए devried::func2()
कहा जाता है।
कैसे func2()
कक्षा बाध्यकारी अनुमान लगाया जा रहा है? या कौन सा fun2()
कहा जाना चाहिए और यह कैसे निर्धारित किया जाता है।
base::func1()
के पीछे क्या हुआ? क्या this
(derive
से base
तक) के लिए कोई कलाकार यहां है? यदि नहीं, तो this
base
कक्षा में फ़ंक्शन तक पहुंचने में सक्षम है?
void func1(){
func2();
}
coderanch पर Useful discussion।
मुझे खेद है, लेकिन यह मेरी टिप्पणी का अंतिम हिस्सा है। मैं वास्तव में जानना चाहता हूं कि 'func2()' 'basc2()' से 'func2()' को कॉल करते समय प्रकार अनुमान कैसे लागू किया जाता है। – Kamel
क्या आपका मतलब है * कैसे 'func2() 'वर्ग बाध्यकारी अनुमान लगाया जा रहा है? * – aioobe
बिल्कुल। कौन सा 'fun2() 'कहा जाना चाहिए और यह कैसे निर्धारित किया जाता है। – Kamel