Tôi đã luôn tự hỏi tại sao chúng ta viết mã
virtual void MyFunction() = 0;
và không
pure virtual void MyFunction();
Có một tài liệu tham khảo cho cơ sở của quyết định này?
Tôi đã luôn tự hỏi tại sao chúng ta viết mã
virtual void MyFunction() = 0;
và không
pure virtual void MyFunction();
Có một tài liệu tham khảo cho cơ sở của quyết định này?
Câu trả lời:
Từ thiết kế và tiến hóa của C ++ - Bjarne Stroustrup - Addison-Wesley (ISBN 0-201-54330-3) - chương 13.2.3:
= 0
Cú pháp tò mò đã được chọn qua phương án thay thế rõ ràng là giới thiệu một từ khóa mớipure
hoặcabstract
bởi vì tại thời điểm đó tôi thấy không có cơ hội nhận được một từ khóa mới được chấp nhận. Nếu tôi đề xuấtpure
, Phiên bản 2.0 sẽ được phát hành mà không có các lớp trừu tượng. Đưa ra lựa chọn giữa một cú pháp đẹp hơn và các lớp trừu tượng, tôi đã chọn các lớp trừu tượng. Thay vì mạo hiểm trì hoãn và phát sinh một số trận đánh nhất địnhpure
, tôi đã sử dụng quy ước C và C ++ truyền thống về việc sử dụng 0 để thể hiện không có ở đó .
Dù sao, nhìn vào tiêu chuẩn C ++ (§ 9.2 - Thành viên nhóm) = 0
được gọi là chỉ định thuần túy .
pure
một từ khóa theo ngữ cảnh mà bạn đặt ở cuối định nghĩa hàm, vì vậy virtual void MyFunction() pure
thay vì = 0
đi cùng với final
và override
.