Hãy giả sử tình huống này trong 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;
};
Về mặt lý thuyết, đầu ra của ứng dụng nhỏ này sẽ là:
- Cơ sở: Màn hình không ảo.
- Cơ sở: Màn hình ảo.
- Cơ sở: Màn hình không ảo.
- Có nguồn gốc: Màn hình ảo.
bởi vì phương thức Hiển thị của lớp Cơ sở không phải là một phương thức ảo nên lớp Phát sinh sẽ không thể ghi đè nó. Đúng?
Vấn đề là khi tôi chạy ứng dụng, nó in ra:
- Cơ sở: Màn hình không ảo.
- Cơ sở: Màn hình ảo.
- Có nguồn gốc: Hiển thị không ảo.
- Có nguồn gốc: Màn hình ảo.
Vì vậy, tôi đã không hiểu khái niệm về các phương thức ảo hoặc điều gì đó kỳ lạ xảy ra trong Visual C ++.
Ai đó có thể giúp tôi với một lời giải thích?
de.Base::Display()
.