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:
= 0Sintaks yang aneh dipilih daripada alternatif yang jelas untuk memperkenalkan kata kunci barupureatauabstractkarena 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) = 0disebut murni-penentu .
purekata kunci kontekstual yang Anda masukkan di akhir definisi fungsi, jadi virtual void MyFunction() purealih-alih = 0, mengikuti finaldan override.