2012-11-27 15 views
5

Klasa z tego kodu jest klasa odniesienia dla wskaźnika z ClassName, tj:Zrobił to w pracy "operator ClassName *". Co to znaczy?

class ClassName; 

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

jestem zakładając ten służy do kontroli ważności wskaźnik, takich jak:

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

mam rację w moim myśleniu?

+3

Czy jest to "classname" lub "ClassName"? Proszę podać * dokładne * w przedstawionym kodzie. –

Odpowiedz

9

To przeciążenie operatora konwersji. Ilekroć obiekt ClassRef należy przekonwertować na typ wskaźnika , ten operator jest wywoływany.

Tak;

ClassRef r; 
ClassName * p = r; 

będzie korzystać z tego przeciążenia.

+0

Więc właśnie napisałem mały test z udziałem dwóch klas - Podstawy i Ref. Kiedy próbowałem używać odwołania w instrukcji "if", to przeciążenie operatora zostało wywołane - dlaczego? – NindzAI

+1

@NindzAI: "jeśli" wymaga czegoś, co można ocenić 0 lub nie 0. Classname nie może, ale ClassRef * (będący wskaźnikiem) może. A ponieważ 'ref' można przekształcić w wskaźnik za pośrednictwem tego operatora konwersji, to się nazywa. –

+0

@NindzAl To dlatego, że podczas gdy kompilator próbuje uzyskać wartość, która może być użyta w miejsce wyrażenia 'bool', stwierdzi, że' ClassRef' może zostać przekonwertowany na typ wskaźnika. Zauważysz, że jeśli podasz operator konwersji bezpośrednio do 'bool', ten będzie preferowany. Jeśli podasz konwersję na inny typ wskaźnika, dostaniesz błąd kompilatora z powodu niejednoznaczności. – enobayram