我怎樣才能過載「< <」運算符(COUT),所以我可以做「COUT」發送給類k的operator <<超負荷C++
3
A
回答
17
的規範執行的任何類型的T
輸出操作符是這樣的:
std::ostream& operator<<(std::ostream& os, const T& obj)
{
os << obj.get_data1() << get_data2();
return os;
}
請注意,輸出流操作符通常不是成員函數。 (這是因爲二元運算符是成員函數,它們必須是它們左側參數類型的成員,但這是一個流,而不是你自己的類型。對於某些內置函數,有幾個重載爲operator<<()
的例外,這是輸出流類的成員。)
爲此,如果不是T
所有的數據都是公開訪問,此操作必須的T
class T {
friend std::ostream& operator<<(std::ostream&, const T&);
// ...
};
朋友或操作者調用一個公共函數做流媒體:
class T {
public:
void write_to_stream(std::ostream&);
// ...
};
std::ostream& operator<<(std::ostream& os, const T& obj)
{
obj.write_to_stream(os);
return os;
}
後者的優點是write_to_stream()
成員函數可以是virtual
(和純),允許多態類被流式傳輸。
如果你想成爲幻想和支持各類流,你必須模板化的是:
template< typename TCh, typename TTr >
std::basic_ostream<TCh,TTr>& operator<<(std::basic_ostream<TCh,TTr>& os, const T& obj)
{
os << obj.get_data1() << get_data2();
return os;
}
(模板,不過,不虛函數工作)
相關問題
- 1. 超負荷返回值<<
- 2. 超負荷運營商<<在C++類中的
- 3. 超負荷運營商<<類模板
- 4. 錯誤:對不明確的超負荷「運營商<<」在C++
- 5. 錯誤:對不明確的超負荷「運營商<<」
- 6. C++ ostream << Operator
- 7. C++的operator <<(無效*)
- 8. 'std :: operator <<'operator <<'不匹配'std :: operator <<
- 9. 重載operator << - C++
- 10. C++ operator <<重載
- 11. << operator not working in C++
- 12. C++重載<< operator
- 13. 重載<operator C++
- 14. std :: operator中的「operator <<」不匹配
- 15. operator << overloading ostream
- 16. C++ Overloading operator <<輸出地址
- 17. Visual C++沒有看到operator << overload
- 18. C++重載operator <<在繼承類
- 19. 重載<< operator C++ stl containers
- 20. 重載運算符<< operator ==和operator!=
- 21. C++從<<超載
- 22. C++超載<<再次
- 23. << <<超載
- 24. operator <<:std :: cout << i <<(i << 1);
- 25. Virtual operator <<和模板
- 26. 如何重載operator <<?
- 27. 叫什麼「operator <<」?
- 28. operator <<()for template class
- 29. 顯式調用operator <<的模板超載給出錯誤
- 30. Operator!= vs <>
這「cout << k」(k是一個類) – aharon 2010-06-17 13:28:06