मैं सोच रहा था कि क्यों जावा कोड का यह टुकड़ा सी ++ में एक ही कोड से अलग उत्पादन उत्पन्न करता है।इन 2 कोडों के बीच अंतर?
A::Foo()
B::Foo()
जावा कोड है::
#include "stdafx.h"
#include <iostream>
using namespace std;
class A
{
public:
A(){
this->Foo();
}
virtual void Foo()
{
cout << "A::Foo()" << endl;
}
};
class B : public A
{
public:
B()
{
this->Foo();
}
virtual void Foo()
{
cout << "B::Foo()" << endl;
}
};
int main(int, char**)
{
B objB;
system("pause");
return 0;
}
यह आउटपुट का उत्पादन
public class Testa {
public Testa()
{
this.Foo();
}
public static void main(String[] args)
{
Testb b = new Testb();
}
void Foo()
{
System.out.println("A");
}
}
class Testb extends Testa {
public Testb()
{
this.Foo();
}
@Override
void Foo()
{
System.out.println("B");
}
}
इस कोड का उत्पादन केवल
B
B
क्यों है इस उत्पादन इस मामले में अलग-अलग ? पहले जावा Testa
निर्माता शामिल किया गया था
सी ++ में आपको कन्स्ट्रक्टर (या विनाशक) में आभासी कार्यों को कॉल नहीं करना चाहिए, मैं ज्यादा जावा नहीं करता, इसलिए मैं उस पर बात नहीं करूंगा। – Borgleader
ध्यान दें कि सी ++ कोड में आप दोनों रचनाकारों से foo कॉल कर रहे हैं, जबकि जावा कोड में आप इसे केवल टेस्टब के निर्माता से ही बुला रहे हैं। – Eran
ओह, क्षमा करें मैंने इसे गलत टाइप किया है, एक सेकंड ... –