Mengapa C ++ tidak memiliki kata kunci "murni" untuk fungsi virtual?


31

Saya selalu bertanya-tanya mengapa kita kode

virtual void MyFunction() = 0; 

dan tidak

pure virtual void MyFunction();

Apakah ada referensi untuk dasar keputusan ini?


2
Tidak ada pendapat? Baiklah kalau begitu. Karena itulah bagaimana bahasa C ++ didefinisikan.
gnasher729

4
Perhatikan bahwa fungsi "murni" sering berarti sesuatu yang tidak terkait.
user253751

Jawaban:


71

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 baru pureatau abstractkarena pada saat itu saya tidak melihat peluang untuk mendapatkan kata kunci baru yang diterima. Seandainya saya menyarankan pure, 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 tertentu pure, saya menggunakan tradisi C dan C ++ konvensi menggunakan 0 untuk mewakili tidak ada .

Bagaimanapun melihat standar C ++ (§ 9.2 - Anggota kelas) = 0disebut murni-penentu .


11
itu keren. Mengingatkan saya pada mengapa PHP memiliki begitu banyak nama fungsi jelek yang berbeda: karena penerjemah pertama menggunakan strlen sebagai fungsi dan distribusi hash harus baik ( i-programmer.info/news/98-languages/… )
Aitch

10
Pengenalan kata kunci yang sensitif terhadap konteks dalam C ++ 11 telah mengurangi kerusakan yang disebabkan oleh penambahan kata kunci. Seharusnya dimungkinkan untuk membuat purekata kunci kontekstual yang Anda masukkan di akhir definisi fungsi, jadi virtual void MyFunction() purealih-alih = 0, mengikuti finaldan override.
Yakk

21
Sebagai tambahan, hampir di mana-mana "fungsi murni" dipahami sebagai fungsi yang outputnya hanya bergantung pada inputnya, dan yang tidak memiliki efek samping.
Deduplicator

2
Cukup banyak pertanyaan tentang "mengapa C ++ melakukan X?" dapat dijawab dengan buku itu. Ini harus menjadi bacaan wajib bagi programmer C ++ yang serius.
Gort the Robot

4
@ Random832 itu "virtual murni" (seperti dalam "100% virtual dan 0% apa pun"), bukan hanya "murni".
user253751
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.