Saya selalu bertanya-tanya mengapa kita kode
virtual void MyFunction() = 0;
dan tidak
pure virtual void MyFunction();
Apakah ada referensi untuk dasar keputusan ini?
Saya selalu bertanya-tanya mengapa kita kode
virtual void MyFunction() = 0;
dan tidak
pure virtual void MyFunction();
Apakah ada referensi untuk dasar keputusan ini?
Jawaban:
Dari Desain dan Evolusi C ++ - Bjarne Stroustrup - Addison-Wesley (ISBN 0-201-54330-3) - bab 13.2.3:
= 0
Sintaks yang aneh dipilih daripada alternatif yang jelas untuk memperkenalkan kata kunci barupure
atauabstract
karena pada saat itu saya tidak melihat peluang untuk mendapatkan kata kunci baru yang diterima. Seandainya saya menyarankanpure
, Rilis 2.0 akan dikirim tanpa kelas abstrak. Diberi pilihan antara sintaksis yang lebih bagus dan kelas abstrak, saya memilih kelas abstrak. Alih-alih mengambil risiko penundaan dan menimbulkan perkelahian tertentupure
, saya menggunakan tradisi C dan C ++ konvensi menggunakan 0 untuk mewakili tidak ada .
Bagaimanapun melihat standar C ++ (§ 9.2 - Anggota kelas) = 0
disebut murni-penentu .
pure
kata kunci kontekstual yang Anda masukkan di akhir definisi fungsi, jadi virtual void MyFunction() pure
alih-alih = 0
, mengikuti final
dan override
.