가상 함수 및 참조에 질문이 있습니다. 나는 인터뷰를 준비하려고 할 때 퍼즐에서 왔습니다. 나는 잠시 google을했지만 정확한 사례를 볼 수는 없다.참조 캐스팅의 C++ 가상 함수
이class A{
public:
virtual void foo() {cout << "A::foo" << endl;}
};
class B: public A{
public:
void foo() {cout << "B::foo" << endl;}
};
class C: public B{
public:
void foo() {cout << "C::foo" << endl;}
};
int main(void){
C c;
B *q;
q = &c; q->foo();
return 0;
}
출력에 대한 내 생각은 B :: foo는 수 있지만 대답은 실제로 C :: foo는 것입니다 :
코드
는 다음과 같이 주어진다. 누군가 vtable이 B의 구현을 선택하지 않는 이유를 말해 줄 수 있습니까? 감사합니다
'q'는'C'의 인스턴스를 가리 킵니다. 그래서'foo'의 버전이 호출됩니다. 이유를 물어 질문을 업데이트 할 수 있습니까? * 출력이'B :: foo'라고 생각하는 이유는 무엇입니까? – Ayjay
죄송합니다.이 기사의 C++에서 언급해야합니다. – wilson100