C 从多个继承类写入二进制文件

c++ Writing to Binary files from multiple inheritance class

本文关键字:二进制文件 继承      更新时间:2023-10-16

我有一个类似于"死亡钻石"

的情况

我有B级和C几乎继承A类,以及继承B和C的D类D类

  A  
 /   
B   C  
  /  
  D 

b&C继承了成员,也是他们自己的成员。D仅继承成员。

我正在编写"保存方法",该方法会得到流向,应将对象写入二进制文件。

和一种获得ifstream的加载方法,应从二进制文件创建对象。

该方法是虚拟的,并以每种类方法仅处理该特定类成员加载&的方式编写。保存(并为其余的继承成员使用继承的类方法(

现在在编写D的保存方法时,基本上我只需要做:

B.save();
C.save();

显然,这将导致a.save((被称为两次,这将使A写入文件两次

我认为诸如将保存方法添加到B和C之类的东西只能保存其成员(而不是A(是愚蠢的

所以我想知道这种情况的最佳实践是什么?

最好的做法是不要在同类的继承中制作钻石。这总是会引起问题,并且最好避免。评估继承中的每个链接,并考虑您是否可以做一些不同的事情,例如在某个时候使用构图或使基类成为纯虚拟接口。

如果您真的想保留该继承,那么就不会使A::save()成为虚拟方法,而是制作一个受保护的纯虚拟A::onSave()方法,预计将在每个派生类中被覆盖。A::save()将执行需要做的事情,然后致电onSave()。B和C都将实现onSave()并执行他们需要做的事情,但不会称呼A::onSave()(因为它是纯虚拟的(。D将实现onSave(),并致电B::onSave()C::onSave()。对于这种情况,这是围绕该问题的工作,但是如果您制作这样的继承钻石,您将始终遇到更多这样的问题。