C++中operator

我們在定義一個類的時候,爲了使用方便,希望通過<<打印類的相關信息,需要重載<<運算符

一般運算符重載都設計爲類的member function,但是operator<<卻不能這樣設計,Essential C++中解釋如下:

爲什麼不把output運算符設計爲一個member function呢?因爲作爲一個member function,其左側操作數必須是隸屬同一個class之下的對象,如果output運算符被設計爲menber function,那麼該類的對象必須被置於output運算符的左側:
object << cout << endl;

這種形式不符合常規代碼書寫規範,所以不建議這樣做。

以我的理解是因爲member function默認有一個this指針的傳入,導致默認將this指針對象作爲了左操作數。

爲了解決這個問題,只能定義爲非成員函數,舉例如下:

template <typename valType>
inline ostream& operator<< (ostream &os, const BinaryTree<valType> &bt) {
    os << "Binary Tree: " << endl;
    bt.print( os );
    return os;
}

只要在h文件或者cpp文件中定義這個操作符,在使用<<進行類輸出時,根據參數列表類型匹配,還是會調用這個重載函數,達到輸出目的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章