【发布时间】:2020-02-23 15:25:04
【问题描述】:
在学习I/O时遇到:
iostream:istream从流中读取,ostream写入流,iostream读写流:派生自istream和ostream
如果istream 和ostream 做同样的工作,需要继承什么?
【问题讨论】:
-
他们不做同样的工作。
在学习I/O时遇到:
iostream:istream从流中读取,ostream写入流,iostream读写流:派生自istream和ostream
如果istream 和ostream 做同样的工作,需要继承什么?
【问题讨论】:
正是通过使iostream 继承自istream 和ostream,您将获得一个支持输入和输出以及两个接口的类(来自istream 和ostream)。这并不意味着功能是重复的,只是意味着istream 和ostream 的接口及其实现正在被重用。
【讨论】:
作家和读者的原型是
class MyClass;
std::ostream& operator<< (std::ostream stream&, const MyClass &obj)
{
obj->WriteTo(stream);
return stream;
}
std::istream& operator>> (std::istream stream&, MyClass &obj)
{
obj->ReadFrom(stream);
return stream;
}
这些函数(尤其是 writer)在 MyClass'es 成员上调用较低级别的流函数。
将std::iostream 派生自std::istream 和std::ostream 意味着您可以将std::iostream 的实例传递给任一函数,它会自动传入std::iostream 的正确部分。
std::istream 和 std::ostream 静态派生自 std::ios,其中包含它们的公共代码。
【讨论】: