Skip to main content

Kế thừa ảo là gì?

Kế thừa ảo là một loại thừa kế trong đó việc thực hiện một siêu lớp là không đầy đủ và một lớp con được yêu cầu để định nghĩa đầy đủ về một đối tượng.Loại di truyền này có thể được sử dụng cùng với cả thừa kế đơn và nhiều, nhưng được sử dụng phổ biến nhất trong nhiều kế thừa.Bất kỳ lớp nào kế thừa từ một lớp cơ sở ảo đều trở thành một lớp con trực tiếp của lớp cơ sở đó.Một lớp cơ sở ảo có thể dựa vào một lớp con để thực hiện tất cả các phương thức của nó, nhưng đây không phải là một yêu cầu.

C ++ là ngôn ngữ máy tính được biết đến phổ biến nhất để sử dụng kế thừa ảo.Để khai báo kế thừa ảo trong C ++, từ khóa ảo được sử dụng.Cả siêu lớp và lớp con phải khai báo các phương thức ảo với từ khóa ảo.Điều này cho trình biên dịch C ++ rằng siêu lớp không đầy đủ và nó phải lấy thông tin từ lớp con để hoàn thành nó.Sử dụng lớp con để hoàn thành siêu lớp không có nghĩa là các lớp con ghi đè lên nhau nếu chúng có cùng một lớp cơ sở, và thay vào đó, trình biên dịch C ++ chăm sóc việc xác định những phần nào đi với mỗi đối tượng.Kế thừa, các chức năng toàn cầu trong C ++ không thể được khai báo ảo.Loại kế thừa này chỉ có thể được sử dụng khi tuân thủ các nguyên tắc lập trình hướng đối tượng (OOP).Lý do cho điều này là các chức năng toàn cầu không được liên kết với một lớp cụ thể, và do đó thường được khép kín.Nếu không có sự kế thừa siêu lớp và phân lớp con không thể xảy ra, vì vậy các chức năng toàn cầu và kế thừa ảo là loại trừ lẫn nhau.Về mặt lý thuyết, các chức năng toàn cầu có thể được sử dụng bên trong các chức năng ảo, nhưng điều ngược lại có thể không phải lúc nào cũng hoạt động. Sự kế thừa ảo được sử dụng để giải quyết nhiều vấn đề lập trình và một trong những vấn đề hữu ích nhất là độ mơ hồ của sự mơ hồ.Trong nhiều kế thừa, người ta có thể có một lớp cơ sở A có hai lớp con, B và C, và sau đó A lớp D kế thừa từ cả hai lớp B và C. Mẫu này thường được gọi là kim cương của cái chết vì nếu lớp A, B, B,và C Tất cả đều có triển khai cùng một phương thức, lớp D không thể xác định việc triển khai nào nên sử dụng.Di truyền ảo giải quyết vấn đề này bởi vì mỗi lần thực hiện các lớp vẫn khác biệt, và do đó không rõ ràng.Sự khác biệt này được xử lý bởi các đối tượng nội bộ chuyên dụng gọi là bảng ảo (VTables) theo dõi từng loại đối tượng, nhưng các bảng này không cần phải được thao tác rõ ràng bởi một lập trình viên vì chúng được xây dựng vào ngôn ngữ.