Đây là số Non-Virtual Interface Idiom (NVI). Trang đó của Herb Sutter có một chút chi tiết về nó. Tuy nhiên, tính khí những gì bạn đọc ở đó với những gì C++ FAQ Lite nói here và here.
Ưu điểm chính của NVI là tách giao diện khỏi triển khai. Một lớp cơ sở có thể thực hiện một thuật toán chung và trình bày nó với thế giới trong khi các lớp con của nó có thể thực hiện các chi tiết của thuật toán thông qua các hàm ảo. Người dùng bên ngoài được bảo vệ khỏi những thay đổi trong các chi tiết thuật toán, đặc biệt nếu sau này bạn quyết định bạn muốn thêm mã tiền xử lý và trước.
Những bất lợi rõ ràng là bạn phải viết thêm mã. Ngoài ra, private
chức năng ảo gây nhầm lẫn cho rất nhiều người. Nhiều lập trình viên nghĩ nhầm rằng bạn không thể ghi đè chúng. Herb Sutter có vẻ giống như private
virtuals, nhưng IMHO nó hiệu quả hơn trong thực tế để làm theo khuyến nghị của C++ FAQ Lite và làm cho chúng protected
.
Nguồn
2009-03-19 18:02:54