2010-06-05 96 views

回答

7

這很容易,只需要實現:

std::ostream & operator<<(std::ostream & os, const myclass & foo) 
{ 
    os << foo.var; 
    return os; 
} 

你需要爲了返回到操作系統的引用鏈outpout(COUT < <富< < ENDL)

+19

這是一個無限遞歸函數。它得到了讚揚!你一定要喜歡這個週末! – 2010-06-05 19:56:41

55

通常由超載operator<<您的課程:

struct myclass { 
    int i; 
}; 

std::ostream &operator<<(std::ostream &os, myclass const &m) { 
    return os << m.i; 
} 

int main() { 
    myclass x(10); 

    std::cout << x; 
    return 0; 
} 
+0

這將輸出構造函數值'10'? – 2016-06-27 14:15:32

+1

請注意,如果'myclass'有任何'private'字段,並且您希望'operator <<()'輸出它們,'myclass'應該聲明'std :: ostream&operator <<(std :: ostream&,myclass const&) '作爲朋友。 – 2017-01-28 18:28:51

+0

不應該是'const myclass&m'而不是'myclass const&m'? – Nubcake 2017-08-15 21:06:59

17

你需要重載<<操作,

std::ostream& operator<<(std::ostream& os, const myclass& obj) 
{ 
     os << obj.somevalue; 
     return os; 
} 

然後當你做cout << x(其中xmyclass類型的你的情況),這將輸出無論你的方法告訴它。在上面的例子中,它將是x.somevalue成員。

如果成員的類型不能直接添加到ostream,那麼您也需要使用與上述相同的方法爲該類型重載<<運算符。

+4

這是左移運算符,而不是「流運算符」。在Iostreams的上下文中,它是插入或提取操作符,但它絕不是流操作符。 – 2010-06-05 20:04:41

+1

對不起,是的,你是對的。這正是我在我的腦海中所稱的,因爲我傾向於只在處理流時才使用它。在這種情況下,它將是您所說的插入操作符,而不僅僅是流操作符。我已經更新了我的答案以消除這一點。 – 2010-06-05 20:11:27

相關問題