2012-02-14 7 views
12

Powiel możliwe:
Why pure virtual function is initialized by 0?Co oznacza "= 0;" zrobić, gdy deklarujesz czyste funkcje wirtualne w C++?

Wiem, że w celu stwierdzenia czystą funkcję wirtualną trzeba użyć "= 0;" składnia, tak jak:

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

Moje pytanie brzmi, co dokładnie (w wewnętrznych działaniach kompilatora) robi "= 0;" składnia zrobić? Czy rzeczywiście ustawia on wskaźnik funkcji na zero? Czy służy jedynie jako deklaracja zamiaru, jak "abstrakcyjne" słowo zarezerwowane w Javie i C#, a jeśli tak, to dlaczego nie dodać do słowa zarezerwowanego słowa, takiego jak "streszczenie", zamiast używać tak tajemnej składni?

+0

Na to pytanie odpowiada [tutaj] (http://stackoverflow.com/questions/2156634/why-pure-virtual-function-is-initialized-by-0). – Nerdtron

+6

Ponieważ słowo kluczowe "czysty" byłoby zbyt czytelne dla programistów C++. – orlp

+0

@noccracker: Bjarne Stroustrup jest nieufny wobec kontekstowych słów kluczowych (tj. Identyfikatorów, które są tylko słowami kluczowymi w niektórych kontekstach, a nie innych) i słusznie, ponieważ sprawia, że ​​leksemowanie jest nieco trudniejsze (tj. Nie można powiedzieć, czy dany identyfikator jest słowem kluczowym lub nie bez jego kontekstu). Nie mogę za to winić. Jednak jest on również nieufny wobec wprowadzania pełnych słów kluczowych, a to daje wszystkie te dziwne zastosowania ('static' !!!!). –

Odpowiedz

0

To oznacza, że ​​nie ma „default” realizacja. Każda klasa pochodna musi ją wdrożyć.

+1

Zauważ, że czyste funkcje wirtualne mogą mieć implementację. – Griwes

0

Wymusza zdefiniowanie go w klasie potomnej.