继承中的Istream和Ostream

3

我有两个类:

class a{
    friend istream &operator>> (istream&in, a&ob) { }
    friend ostream &operator<< (ostream&out, const a&ob) { }
}

class b:public a{
    friend istream &operator>> (istream&in, b&ob) { }
    friend ostream &operator<< (ostream&out, const b&ob) { }
}

类a很好用。我可以读写类型为a的对象。类b继承了类a的所有内容并添加了一些新数据。在我的类b的istream和ostream运算符中,有没有一种方法可以使用类a的输入/输出运算符来读取和写入公共字段?谢谢。

2个回答

2
您可以通过将ob强制转换为超类类型来重用运算符:
ostream &operator<< (ostream& out, const b& ob) {
   // Output the parts common to a and b
   out << static_cast<const a&>(ob);
   // Do additional things specific to b
   out << some_part_specific_to_b;
   return out;
}

1
保留基类的提取器和插入器重载,将实际操作延迟到虚成员函数中:
istream& operator>>(istream& in, a& ob)
{
    ob.read(in);
    return in;
}

ostream& operator<<(ostream& out, const a& ob)
{
    ob.write(out);
    return out;
}

b的覆盖程序可以简单地调用基类重载:

class b : public a {
public:
    void read(std::istream& is) {
        a::read(is);
        // read into derived class
    }

    void write(std::ostream& os) {
        a::write(os);
        // write out derived class
    }
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接