2010-12-03 79 views
5

爲了使用cout:std :: cout < < myObject,爲什麼我必須傳遞一個ostream對象?我認爲這是一個隱含的參數。operator << overloading ostream

ostream &operator<<(ostream &out, const myClass &o) { 

    out << o.fname << " " << o.lname; 
    return out; 
} 

感謝

回答

5

您不添加其他成員函數ostream,因爲這將需要重新定義類。你不能將它添加到myClass,因爲ostream先走。你可以做的唯一事情就是爲獨立函數添加一個重載,這就是你在這個例子中所做的。

+0

+1對於什麼是unsaid int問題有很好的推導 – 2010-12-03 20:38:43

-1

因爲您正在重載一個免費函數,而不是一個成員函數。

2

僅當它是否是第一個參數的類的成員函數時。因此,這將是:

class ostream { 
    ... 
    ostream &operator << (const myClass &o); 
    ... 
}; 

由於ostream寫你的長課前,你看讓你的類存在的問題。因此,我們必須實現操作者作爲一個獨立的功能:

(return type) operator << ((left hand side), (right hand side)); 

當操作員是作爲類的成員函數,左手側是this,和參數成爲右手側實現。 (對於二元運算符 - 一元運算符的工作方式類似。)