2010-03-26 10 views
14

Ho il seguente codice all'interno del file .h e non sono sicuro di cosa faccia l'istruzione di assegnazione e come viene chiamato correttamente?Dichiarazione di intestazione e file di intestazione C++ che termina con "= 0"

virtual void yield() = 0; 

ho pensato che la funzione restituisce un valore pari a 0 per impostazione predefinita, ma dal momento che questa funzione restituisce void Sono un po 'confuso. Qualcuno può commentare questo e forse dire come posso fare riferimento a questo compito, voglio dire come si chiama in gergo C++?

Grazie.

+2

leggi le funzioni virtuali. –

+1

E per informazioni sul perché viene utilizzata questa sintassi strana, vedere http://stackoverflow.com/questions/2156634/why-pure-virtual-function-is-initialized-by-0 –

risposta

18

Questa è una pura funzione virtuale. Questo significa che le sottoclassi devono implementare questa funzione, altrimenti sono astratte, il che significa che non puoi creare oggetti di quella classe.

class ISomeInterface { 
public: 
    virtual std::string ToString() = 0; 
} 

class SomeInterfaceImpl : public ISomeInterface { 
public: 
    virtual std::string ToString() { 
     return "SomeInterfaceImpl"; 
    } 
} 

L'idea è che una classe può esporre un certo metodo, ma sottoclassi hanno per la sua attuazione. In questo esempio, ISomeInterface espone un metodo ToString, ma non esiste un'implementazione predefinita sensibile per questo, quindi rende il metodo puro virtuale. Sottoclassi come SomeInterfaceImpl possono quindi fornire un'implementazione adatta.

+0

Hai spiegato cos'è una pura funzione virtuale. L'OP ha chiesto cosa fa il "= 0"? Non hai risposto a questa domanda. –

+0

L'OP chiede * "come si chiama in C++ jargon?" * - questo viene risposto nella prima frase della mia risposta. Se ritieni che ciò richieda ulteriori spiegazioni, sentiti libero di modificare la mia risposta, aggiungere una tua risposta o spiegare in un commento. –

+0

Ok. Giusto. Sono stato confuso dal "= 0", ma, penso che ho finito per capirlo. Il "= 0" è ciò che dice al compilatore che non ci sarà un corpo per la funzione, questo, rendendolo un "puro virtuale". Corretta? –

3

se è un metodo virtuale puro (aka abstract) cerca qui o google http://www.artima.com/cppsource/pure_virtual.html

= 0 non significa che il valore di ritorno di default, si notifica che la funzione è pura virtual

+1

No non lo è - indica che la funzione è pura. Le funzioni virtuali pure possono avere corpi. –

+0

quindi, in che cosa differiscono dal solo virtuale? – Andrey

+0

Impediscono che la classe che li contiene venga instillata. –

8

La sintassi = 0 dichiara un pure virtual function, non ha nulla a che fare con il valore restituito.

Se una classe contiene almeno una funzione virtuale pura, ciò rende la classe "astratta", il che significa che non può essere istanziata.

In pratica, tali classi devono essere concretizzate sottoclassando e implementando le funzioni virtuali.

0

La sintassi è oscura, ma "= 0" indica che il metodo è una pura funzione virtuale. Rende astratta la classe (non è possibile istanziarla) e la sua implementazione è lasciata alle classi derivate.

Viene utilizzato quando tutto ciò che si desidera definire è un'interfaccia. Utilizzare la parola chiave virtuale quando si desidera definire un'interfaccia e fornire anche un'implementazione predefinita.

Problemi correlati