2012-11-27 76 views
5

這段代碼的類是類名的指針的引用類,即:在工作中運行「operator ClassName *」。這是什麼意思?

class ClassName; 

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

我假定這是用於指針的有效性檢查,如:

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

我是正確在我的想法?

+3

它是'classname'還是'ClassName'?請在提供的代碼中*精確*。 – 2012-11-27 20:03:04

回答

9

這是轉換運算符的重載。無論何時需要將對象ClassRef轉換爲ClassName指針類型,都會調用此運算符。

所以;

ClassRef r; 
ClassName * p = r; 

將利用這種過載。

+0

所以我只寫了一個涉及兩個類的小測試 - Base和Ref。當我嘗試在「if」語句中使用引用時,這個運算符重載被調用 - 爲什麼? – NindzAI

+1

@NindzAI:「if」需要什麼東西可以評估0或非0。 Classname不能,但ClassRef *(是一個指針)可以。由於'ref'可以通過該轉換操作符轉換爲指針,這就是所謂的。 –

+0

@NindzAl這是因爲當編譯器試圖獲得一個可以用來代替'bool'表達式的值時,它發現'ClassRef'可以被轉換爲一個指針類型。你會注意到,如果你直接給一個'bool'提供一個轉換操作符,那麼這個操作符將是首選。如果你提供了一個到另一個指針類型的轉換,由於含糊不清,你會得到一個編譯器錯誤。 – enobayram