【发布时间】:2013-11-19 19:52:16
【问题描述】:
我正在编写一个可以读/写特定格式文本文件的类。我考虑从std::iostream 继承,但是在用Google 搜索时,我发现了一些我不应该从std::iostream 继承的cmets/suggestions。
有什么理由我应该避免直接从std::iostream 继承?我应该继承更底层的东西吗,比如std::basic_iostream?
【问题讨论】:
-
总的来说,我认为与其继承,不如简单地拥有一个
std::iostream作为成员。 -
@JonathanMee 你可能是对的;这是旧的
has-a与is-a论点。由于我的课程将直接读取/写入文件,我认为它更多地落在has-a方面,所以我想尝试继承。 -
为了提供任何类型的格式化程序,我更喜欢使用
std::ostream和std::istream引用的类。 -
'所以我想尝试继承'这肯定会让正确的实现变得更加困难。
-
从技术上讲,继承的主要问题是析构函数不是虚拟的。在
std::basic_iostream的情况下,析构函数是虚拟的,因此可以毫无问题地从它继承。事实上,你应该做的只是应用合成。
标签: c++ inheritance iostream