在C++中使用非友元方法重载 I/O 运算符 |&istream 和 &ostream 函数



所以我的问题是我需要在类中使我的&istream和&ostream函数(运算符)成为虚拟的。为此,我需要使它们成为类自己的方法,而不是像这样的友元函数:

friend istream& operator>>(istream&, const String&);
friend ostream& operator<<(ostream&, const String&);

那么,如何在不使用友元函数的情况下在类本身编写这些方法呢?我只需要我的标题的原型,我可以自己编写正文,我只是对参数感到困惑。

顺便说一句,"字符串"是在其他地方定义的对象类型。

只需创建 [ 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);
}

也许是这样的:

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;}

相关内容

最新更新