2012-02-14 17 views
12

Eventuali duplicati:
Why pure virtual function is initialized by 0?Cosa significa "= 0;" fare quando si dichiarano funzioni virtuali pure in C++?

so che, al fine di dichiarare una funzione virtuale pura è necessario utilizzare "= 0;" sintassi, in questo modo:

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

La mia domanda è, che cosa esattamente (in funzionamento interno del compilatore) fa il "= 0;" sintassi fare? In realtà ha impostato il puntatore della funzione uguale a zero? Serve solo come una dichiarazione di intenti, come la parola riservata "astratta" in Java e C#, e in tal caso, perché non aggiungere una parola riservata come "astratto" al linguaggio piuttosto che usare una sintassi arcana?

+0

Questa domanda ha risposta [qui] (http://stackoverflow.com/questions/2156634/why-pure-virtual-function-is-initialized-by-0). – Nerdtron

+6

Poiché la parola chiave 'pure' sarebbe troppo leggibile per i programmatori C++. – orlp

+0

@nightcracker: Bjarne Stroustrup è diffidente nei confronti delle parole chiave contestuali (cioè identificatori che sono solo parole chiave in alcuni contesti e non in altri) e giustamente perché rende lexing un po 'più difficile (ovvero non si può dire se un determinato identificatore è una parola chiave o non senza il suo contesto). Non posso biasimarlo per questo. Tuttavia è anche cauto nell'introdurre parole chiave complete, e questo produce tutti quegli strani usi ('static' !!!!). –

risposta

0

Ciò significa che non v'è alcuna implementazione "default". Qualsiasi classe derivata deve implementarla.

+1

Si noti che le funzioni virtuali pure possono avere implementazione. – Griwes

0

Ti costringe a definirlo in una classe figlio.

Problemi correlati