[英]Overloading I/O operators with a non-friend method in C++ | &istream and &ostream functions
因此,我的問題是我需要使類中的&istream和&ostream函數(操作符)虛擬化。 為此,我需要使它們成為類自己的方法,而不是像這樣的朋友函數:
friend istream& operator>>(istream&, const String&);
friend ostream& operator<<(ostream&, const String&);
那么,如何在不使用好友函數的情況下在類本身中編寫這些方法呢? 我只需要標頭的原型,就可以自己編寫主體,只是對參數感到困惑。
Btw“ String”是在其他地方定義的對象類型。
也許像這樣:
class String
{
public:
virtual void read(istream& is) { /* […] */ }
virtual void print(ostream& os) const { /* […] */ }
};
istream& operator>>(istream& is, String& s)
{s.read (is); return is;}
ostream& operator<<(ostream& os, const String& s)
{s.print(os); return os;}
只需創建[ virtual
]成員函數read()
和write()
每個成員函數采用相應的流,然后從相應的運算符調用它們:
class String {
// ...
public:
virtual std::istream& read(std::istream& in);
virtual std::ostream& write(std::ostream& out) const;
};
std::istream& operator>> (std::istream& in, String& s) {
return s.read(in);
}
std::ostream& operator<< (std::ostream& out, String const& s) {
return s.write(out);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.