【发布时间】:2017-06-05 23:21:48
【问题描述】:
我有一个类似“死亡钻石”的案例
我有 B 类和 C 类,它们实际上继承了 A 类, 还有继承B类和C类的D类。
A
/ \
B C
\ /
D
B & C 有继承的成员,也有他们自己的成员。 D 只有继承的成员。
我正在编写获取 ofstream 的 Save 方法,并且应该将 Object 写入二进制文件。
还有一个 Load 方法,它获取 ifstream 并应该从二进制文件创建对象。
方法是虚拟的,并且以这样一种方式编写,即每个类方法只处理特定的类成员加载和保存(并对其余继承成员使用继承的类方法)
现在在为D写Save方法的时候,基本上只需要做:
B.save();
C.save();
显然这将导致 A.save() 被调用两次,这将导致 A 被写入文件两次
我认为像给 B 和 C 添加一个 saveOnly 方法这样只会保存他们的成员(而不是 A 的)是愚蠢的
所以我想知道这种情况下的最佳实践是什么?
【问题讨论】:
-
欢迎来到 Stack Overflow。请花时间阅读The Tour 并参考Help Center 中的材料,您可以在这里问什么以及如何问。
标签: c++ visual-studio inheritance binaryfiles diamond-problem