이 자바 코드 조각이 C++의 동일한 코드와 다른 출력을 왜 생성하는지 궁금합니다.이 두 코드의 차이점은 무엇입니까?
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
생성자가 포함되기 전에
C++에서는 생성자 (또는 소멸자)에서 가상 함수를 호출하면 안됩니다. Java를 많이 사용하지 않으므로 이에 대해 설명하지 않겠습니다. – Borgleader
C++ 코드에서는 두 생성자 모두에서 foo를 호출하지만 Java 코드에서는 Testb의 생성자에서만 호출한다는 점에 유의하십시오. – Eran
죄송합니다. 잘못 입력하셨습니다. –