Tại sao C ++ không có một từ khóa thuần tinh tế cho các chức năng ảo?


31

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?


2
Không có ý kiến? Được rồi Bởi vì đó là cách ngôn ngữ C ++ được định nghĩa.
gnasher729

4
Lưu ý rằng hàm "thuần" thường có nghĩa là một cái gì đó không liên quan.
dùng253751

Câu trả lời:


71

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:

= 0Cú 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ới purehoặc abstractbở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ất pure, 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 định pure, 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 .


11
thật tuyệt Nhắc nhở tôi về lý do tại sao PHP có rất nhiều tên hàm xấu xí khác nhau: bởi vì trình thông dịch đầu tiên sử dụng strlen làm hàm băm và phân phối nên tốt ( i-programmer.info/news/98-lacular/iêu )
Aitch

10
Việc giới thiệu các từ khóa nhạy cảm theo ngữ cảnh trong C ++ 11 đã làm giảm thiệt hại mà việc thêm từ khóa gây ra. Có thể tạo puremộ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() purethay vì = 0đi cùng với finaloverride.
Yakk

21
Bên cạnh đó, gần như mọi nơi một "hàm thuần túy" được hiểu là một hàm có đầu ra chỉ phụ thuộc vào đầu vào của nó và không có tác dụng phụ.
Ded repeatator

2
Khá nhiều câu hỏi về "tại sao C ++ làm X?" có thể được trả lời bởi cuốn sách đó. Nó nên được yêu cầu đọc cho bất kỳ lập trình viên C ++ nghiêm trọng.
Gort Robot

4
@ Random832 đó là "thuần ảo" (như trong "100% ảo và 0% bất cứ thứ gì khác"), không chỉ là "thuần".
dùng253751
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.