C ++ neden sanal işlevler için "saf" bir anahtar kelimeye sahip değil?


31

Neden kodladığımızı hep merak etmişimdir.

virtual void MyFunction() = 0; 

ve yok

pure virtual void MyFunction();

Bu kararın temelinde bir referans var mı?


2
Görüş yok mu? Tamam ozaman. Çünkü C ++ dili bu şekilde tanımlanır.
gnasher729

4
"Saf" bir fonksiyonun genellikle alakasız bir şey anlamına geldiğine dikkat edin.
user253751 20:15

Yanıtlar:


71

Gönderen Tasarım ve C Evrim ++ Bjarne Stroustrup - - Addison-Wesley (ISBN 0-201-54330-3) - Bölüm 13.2.3:

Meraklı = 0sözdizimi, yeni bir anahtar kelime eklemenin açık bir alternatifi olarak seçildi pureveya abstracto zamanlar kabul edilen yeni bir anahtar kelime alma şansım olmadı. Önermiş olsaydım pure, Sürüm 2.0, soyut sınıflar olmadan gönderilirdi. Güzel bir sözdizimi ve soyut sınıflar arasında bir seçim yapıldığında, soyut sınıfları seçtim. Gecikmeyi riske atmak ve belirli kavgaları sona erdirmek yerine pure, C ve C ++ geleneğini orada olmayanları temsil etmek için 0 kullanarak kullandım .

Yine de C ++ standardına bakıldığında (§ 9.2 - Sınıf üyeleri) saf belirteci= 0 olarak adlandırılır .


11
çok havalı. PHP'nin neden bu kadar farklı çirkin fonksiyon ismine sahip olduğunu hatırlatıyor: çünkü ilk tercüman hash fonksiyonu ve dağıtımı olarak strlen kullanıyordu ( i-programmer.info/news/98-languages/… )
Aitch

10
Bağlam duyarlı anahtar kelimelerin C ++ 11’de kullanılması, anahtar kelime eklemenin neden olduğu hasarı azaltır. Yapmak mümkün olmalıdır pureböylece, bir fonksiyon tanımının sonunda koymak bağlamsal anahtar kelime virtual void MyFunction() pureyerine = 0eşlik etmek, finalve override.
Yakk

21
Bir yana, hemen hemen her yerde "saf işlev", çıktısının yalnızca girişine bağlı olan ve hiçbir yan etkisi olmayan bir işlev olduğu anlaşılıyor.
Deduplicator

2
Hemen hemen herhangi bir soru "C ++ neden X yapar?" bu kitap tarafından cevaplanabilir. Herhangi bir C ++ programcısı için okuma yapılması gerekir.
Robotu

4
@ Random832 sadece "saf" değil, "saf sanal" ("% 100 sanal ve başka bir şey% 0" da olduğu gibi).
user253751 20:15
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.