我對如何在C++中爲我的類重載流操作符有點困惑,因爲它看起來像是流類中的函數,而不是我的類。什麼是正常的方法來做到這一點?目前,對於「get from」操作員,我有一個定義什麼是正確的方式來超載流操作符<< >>我的班?
istream& operator>>(istream& is, Thing& thing) { // etc...
哪個工作。在Thing類的定義中沒有提到它。我希望它能夠在實現中訪問我的Thing類的成員 - 我該怎麼做?
我對如何在C++中爲我的類重載流操作符有點困惑,因爲它看起來像是流類中的函數,而不是我的類。什麼是正常的方法來做到這一點?目前,對於「get from」操作員,我有一個定義什麼是正確的方式來超載流操作符<< >>我的班?
istream& operator>>(istream& is, Thing& thing) { // etc...
哪個工作。在Thing類的定義中沒有提到它。我希望它能夠在實現中訪問我的Thing類的成員 - 我該怎麼做?
你的實現很好。您需要執行的唯一額外步驟是聲明你的運營商作爲friend
在Thing
:
class Thing {
public:
friend istream& operator>>(istream&, Thing&);
...
}
你讓你的operator>>
Thing類的朋友。
其他的答案是正確的。在情況下,它可以幫助你,這裏有一個代碼示例(source):
class MyClass {
int x, y;
public:
MyClass(int i, int j) {
x = i;
y = j;
}
friend ostream &operator<<(ostream &stream, MyClass ob);
friend istream &operator>>(istream &stream, MyClass &ob);
};
ostream &operator<<(ostream &stream, MyClass ob)
{
stream << ob.x << ' ' << ob.y << '\n';
return stream;
}
istream &operator>>(istream &stream, MyClass &ob)
{
stream >> ob.x >> ob.y;
return stream;
}
我會定義運算符<<,如下所示:ostream&operator <<(ostream&stream,const MyClass & ob); – 2015-07-12 08:28:28
有幾種方法和正確的真的取決於類做什麼。
通常情況下,允許讀取信息的公共API是有意義的,在這種情況下流媒體運營商不需要訪問私有信息。
也許最流行的方法是宣佈流類功能的朋友的類。
我最喜歡的是提供一個公共的Boost.Serialization樣式模板函數,可用於流式傳輸以及其他任何方式。
謝謝。這是什麼意思,它不是在「公共:」部分? – ghallio 2010-02-28 18:14:53