我的论坛包含以下结构的代码
class Base
{
public:
float some_base_function();
};
class Derived : public Base
{
public:
float some_other_function();
float yet_another_function();
};
这很简单。问题是我目前正在考虑以一些实验方式重新实现Derived
。我的想法是这样做:
class IDerived : public Base
{
public:
virtual float some_other_function() = 0;
virtual float yet_another_function() = 0;
};
然后将旧的Derived
更改为继承自IDerived
。是这种混凝土 - >摘要 - >在C ++中甚至允许具体的继承结构?
更糟糕的是,原始的Derived
类在框架内被持久化,因此它必须在内存中保持相同的结构(我希望通过使IDerived
抽象来实现)。新的Derived
是否具有相同的内存布局?
答案 0 :(得分:2)
这是合法的,但似乎并不需要。额外继承有什么意义?
此外,Base
和Derived
没有任何虚拟方法,因此通过添加任何虚拟方法,您可以99%确定内存布局不会相同。
答案 1 :(得分:1)
是的,这是允许的。但一般做法是避免任何形式的具体基类(参见例如Scott Meyers的{33}的第33项)。
尝试通过存储二进制表示来持久化复杂对象必然会导致各种各样的问题;我建议找一个更好的机制(序列化等)。