gpt4 book ai didi

C++ 多重继承从文件保存对象中读取两次

转载 作者:行者123 更新时间:2023-11-30 05:00:41 24 4
gpt4 key购买 nike

首先让我解释一下我的层次结构:

         Animal
/ | \
Mammal Fish Birds
/ \ / \
Horse MammalFish Flamingo
/ \
Mermaid GoldFish

每个类都有以下方法:

Save(ofstream & ofs) // Saves the data to txt file
Load(ifstream & ifs) // Load the data from txt file
Constructor(ifstream & ifs) { Load(ifs) } // Constructor from file, uses `Load` method.

每个类都实现自己的 Load/Save 方法(如果它们有任何数据成员)并调用层次结构中的前一个类的 Load/Save 方法。

问题出在我的多重继承上,当我使用 MermaidGoldFish 保存方法时,它保存了两次动物(这基本上是有道理的),但我不能找到避免这种情况的方法..

另一个问题是构造函数,它会自动调用所有基类的默认构造函数(这是不需要的,应该只调用调用基类方法的Load())。我无法显式调用基类构造函数,因为在我的 Load() 方法中我还调用了基类的 Load() 方法,这将使我使用 Load() 两次。

谢谢。

最佳答案

虚拟继承应该解决diamond problem那是在你的继承树中的MammalFish。它还要求您将 Load 和 Save 方法声明为虚拟的,如果它们将出现在所有类中的话。

对于构造器问题,每个子类的构造器都会先调用基类的构造器,以确保基类被正确初始化;这就是继承的工作原理。在您的情况下,您可以考虑不从构造函数调用 Load 。相反,它应该从单独的初始化方法中调用。

关于C++ 多重继承从文件保存对象中读取两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50656154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com