Tôi đang học C++ và đang học về từ khóa ảo. Tôi đã lùng sục internet cố gắng hiểu nó vô ích. Tôi đã đi vào trình soạn thảo của tôi và đã làm thử nghiệm sau đây, hy vọng nó sẽ in ra thông báo cơ sở hai lần (vì tôi đã theo ấn tượng rằng từ khóa ảo là cần thiết để ghi đè lên các hàm). Tuy nhiên, nó in ra hai thông điệp khác nhau. Ai đó có thể giải thích cho tôi tại sao chúng ta cần từ khóa ảo nếu chúng ta có thể chỉ đơn giản là ghi đè lên các hàm và dường như vẫn có hành vi đa hình? Có lẽ ai đó có thể giúp tôi và những người khác trong tương lai hiểu được ảo so với việc ghi đè. (Kết quả tôi nhận được là "Tôi là cơ sở", tiếp theo là "Tôi là nguồn gốc").C++ từ khóa ảo vs chức năng ghi đè
#include <iostream>
using namespace std;
class Base{
public:
void printMe(){
cout << "I am the base" << endl;
}
};
class Derived: public Base{
public:
void printMe(){
cout << "I am the derived" << endl;
}
};
int main() {
Base a;
Derived b;
a.printMe();
b.printMe();
return 0;
}
Lưu ý: 'sử dụng không gian tên std;' là thói quen xấu để xâm nhập và nếu bạn có thể dừng bây giờ, bạn có thể tránh được rất nhiều cơn đau đầu trong tương lai. Tiền tố 'std ::' có lý do: Nó tránh xung đột với các lớp, cấu trúc và các biến của riêng bạn. – tadman
Thử 'Base * p = new Derived; p-> printMe(); 'có và không có' virtual'. – HolyBlackCat
Để làm rõ - hành vi đa hình đạt được khi truy cập một đối tượng thông qua một con trỏ hoặc một tham chiếu đến lớp cơ sở của nó. – DeiDei