簡體   English   中英

用C ++中的非朋友方法重載I / O運算符 &istream和&ostream函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM