2012-02-14 30 views
12

Olası Çoğalt: Biliyorum
Why pure virtual function is initialized by 0?"= 0;" nedir? C++ 'da saf sanal işlevleri bildirirken ne yaparsınız?

, bu kullanmak gerek saf sanal işlev bildirmek amacıyla "= 0;" sözdizimi, şöyle:

class Foo 
{ 
protected: 
    Foo(); 
    virtual int getValue() = 0; 
}; 

Sorum (derleyici iç işleyişte) tam olarak ne olduğunu yapar "= 0;" sözdizimi yapmak? Fonksiyon göstergesini gerçekten sıfıra eşit mi yapıyor? Java ve C# 'de "soyut" ayrılmış kelime gibi bir niyet ifadesinden başka bir şey olarak hizmet etmez ve eğer öyleyse, neden böyle bir arbane sözdizimini kullanmak yerine dile "soyut" gibi ayrılmış bir sözcük eklemiyorsunuz?

+0

Bu soruya cevap verilmiştir [burada] (http://stackoverflow.com/questions/2156634/why-pure-virtual-function-is-initialized-by-0). – Nerdtron

+6

Çünkü "saf" anahtar sözcüğü C++ programcıları için çok okunabilir. – orlp

+0

@nightcracker: Bjarne Stroustrup, bağlamsal anahtar kelimelere (yani, yalnızca bazı bağlamlarda yalnızca anahtar kelimeler olan tanımlayıcılar) ve haklı olarak bu yüzden biraz daha zor hale getirdiğinden (yani belirli bir tanımlayıcının bir anahtar kelime mi yoksa içeriği olmadan). Bunun için suçlayamam. Ancak aynı zamanda tam anahtar kelimeler tanıtmak konusunda da ihtiyatlı ve bu tüm tuhaf kullanımlar ("statik" !!!!) verir. –

cevap

0

. Herhangi bir türetilmiş sınıfın uygulanması gerekir.

+1

Saf sanal işlevlerin uygulamaya sahip olabileceğini unutmayın. – Griwes

0

Bunu bir alt sınıfta tanımlamanız için zorlar.

İlgili konular