继承中的Istream和ostream
Istream and ostream in inheritance
我有两个类:
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的所有内容,并添加了一些新数据。在我的istream和ostream操作符类b是否有一种方法来读取和写入使用类a的输入/输出操作符的公共字段?谢谢你。
您可以通过将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;
}
保留基类的提取器和插入器重载,并将实际操作推迟到虚成员函数:
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
}
};
相关文章:
- 需要从 istream 和 ostream 派生 iostream
- 逗号在重载 ostream 和 istream 在结构中分开
- 为什么 Clang std::ostream 写一个 std::istream 无法读取的双精度?
- C++ 模板类无法修复 ostream 和 istream 函数
- C++使 ostream 和 istream 运算符过载
- 尝试重载时'ostream'和'istream'错误C++
- 如何从 istream、ostream 正确继承我的类?
- C++,错误:" no operator "== " matches these operands ",ostream/istream
- 将带有C++的二进制文件从 istream 复制到 ostream 并不总是正确的
- 带有 ostream 和 istream 的 C++ 向量
- 带有数组的 istream / ostream 参数
- C++ istream >> 和 ostream << 错误
- 用于使用 istream/ostream 传输消息的类似网络协议
- Streambuf、Ostream、Ostreambuf、iStream、ISTREAMBUF 和相关迭代器
- C FILE* to ostream/istream
- 为什么我们需要在重载>>和<<运算符时返回对 istream/ostream 的引用?
- 对C++中的istream和ostream运算符进行双重重载
- ostream 和 istream 覆盖,无需 << / >> 运算符
- 运算符重载:Ostream/Istream
- ostream << istream 并在空文件上测试 EOF,从 istream 获取字符的替代方法