Visual C ++ 2010에서이 시나리오를 가정 해 보겠습니다.
#include <iostream>
#include <conio.h>
using namespace std;
class Base
{
public:
int b;
void Display()
{
cout<<"Base: Non-virtual display."<<endl;
};
virtual void vDisplay()
{
cout<<"Base: Virtual display."<<endl;
};
};
class Derived : public Base
{
public:
int d;
void Display()
{
cout<<"Derived: Non-virtual display."<<endl;
};
virtual void vDisplay()
{
cout<<"Derived: Virtual display."<<endl;
};
};
int main()
{
Base ba;
Derived de;
ba.Display();
ba.vDisplay();
de.Display();
de.vDisplay();
_getch();
return 0;
};
이론적으로이 작은 응용 프로그램의 출력은 다음과 같아야합니다.
- 기본 : 비가 상 디스플레이.
- 베이스 : 가상 디스플레이.
- 기본 : 비가 상 디스플레이.
- 파생 : 가상 디스플레이.
Base 클래스의 Display 메서드는 가상 메서드가 아니므로 Derived 클래스는이를 재정의 할 수 없습니다. 권리?
문제는 응용 프로그램을 실행할 때 다음과 같이 인쇄된다는 것입니다.
- 기본 : 비가 상 디스플레이.
- 베이스 : 가상 디스플레이.
- 파생 : 비가 상 디스플레이.
- 파생 : 가상 디스플레이.
그래서 가상 메서드의 개념을 이해하지 못했거나 Visual C ++에서 이상한 일이 발생했습니다.
누군가가 설명을 도와 줄 수 있습니까?
de.Base::Display()
.