Khi một phương pháp được khai báo là virtual
trong một lớp học, ghi đè trong các lớp thừa kế sẽ được tự động coi virtual
là tốt, và ngôn ngữ C++ làm cho từ khóa này virtual
bắt buộc trong trường hợp này:Tại sao tùy chọn 'ảo' cho các phương thức ghi đè trong các lớp dẫn xuất?
class Base {
virtual void f();
};
class Derived : public Base {
void f(); // 'virtual' is optional but implied.
};
Câu hỏi của tôi là: Điều gì lý do để thực hiện virtual
tùy chọn là gì?
Tôi biết rằng trình biên dịch không phải là điều cần thiết, nhưng tôi nghĩ rằng các nhà phát triển sẽ được hưởng lợi nếu một ràng buộc như vậy được thực thi bởi trình biên dịch.
Ví dụ: đôi khi khi tôi đọc mã của người khác, tôi tự hỏi liệu phương pháp có phải là ảo hay không và tôi phải theo dõi các siêu lớp của nó để xác định điều đó. Và một số tiêu chuẩn mã hóa (Google) làm cho nó trở thành 'phải' để đặt từ khóa virtual
vào tất cả các lớp con.
Hãy nghĩ rằng bạn muốn xóa '= 0' khỏi' NonVirtualBase' :) –
@Matthieu - tốt bắt! Tôi khá buồn ngủ ngày hôm nay xD –