Giả sử kịch bản này trong Visual C++ 2010:phương pháp phi ảo Overriding
#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 này ít nên là:
- Base: hiển thị không ảo.
- Cơ sở: Hiển thị ảo.
- Cơ sở: Màn hình không phải ảo.
- Xuất phát: Hiển thị ảo.
vì Phương pháp hiển thị của lớp Cơ sở không phải là phương pháp ảo nên lớp gốc không được ghi đè lên lớp đó. Đúng?
Vấn đề là khi tôi chạy ứng dụng, nó in này:
- Base: hiển thị không ảo.
- Cơ sở: Hiển thị ảo.
- Có nguồn gốc: Hiển thị không phải ảo.
- Xuất phát: Hiển thị ảo.
Vì vậy, hoặc tôi không hiểu khái niệm về phương pháp ảo hoặc điều gì đó lạ xảy ra trong Visual C++.
Ai đó có thể giúp tôi giải thích?
bạn hoàn toàn sẽ có __Base: Hiển thị không ảo .__ khi thay đổi dòng của bạn thành 'de.Base :: Display()'. –