2012-11-27 11 views
5

La classe con questo codice è una classe di riferimento per un puntatore di ClassName, vale a dire:Utilizzato per questo "operatore ClassName *". Cosa significa questo?

class ClassName; 

class ClassRef 
{ 
    ClassName* m_class; 
    ... 
    operator ClassName *() const { return m_class; } 
... 

Io parto dal presupposto questo è usato per i controlli del puntatore di validità, come ad esempio:

ClassRef ref(new ClassName()) 
if (ref) { bla bla bla } 

Sono corretto nel mio modo di pensare?

+3

È 'classname' o' ClassName'? Si prega di * preciso * nel codice presentato. –

risposta

9

Questo è un sovraccarico dell'operatore di conversione. Ogni volta che un oggetto ClassRef deve essere convertito in un tipo di puntatore ClassName, viene chiamato questo operatore.

Quindi;

ClassRef r; 
ClassName * p = r; 

farà uso di questo sovraccarico.

+0

Quindi ho appena scritto un piccolo test che coinvolge due classi: Base e Rif. Quando ho provato ad usare il riferimento all'interno di una frase "if", questo overload dell'operatore è stato chiamato - perché? – NindzAI

+1

@NindzAI: il "se" richiede qualsiasi cosa può essere valutata 0 o non-0. Classname non può, ma ClassRef * (essendo un puntatore) può. E dato che 'ref' può essere convertito in un puntatore tramite quell'operatore di conversione, questo viene chiamato. –

+0

@NindzAl Questo perché mentre il compilatore tenta di ottenere un valore che può essere utilizzato al posto di un'espressione 'bool', trova che' ClassRef' può essere convertito in un tipo di puntatore. Noterai che se fornisci direttamente un operatore di conversione a un 'bool', quello sarà preferito. E se fornisci una conversione a un altro tipo di puntatore, riceverai un errore del compilatore a causa dell'ambiguità. – enobayram

Problemi correlati