抽象派生类

abstract derived class

本文关键字:派生 抽象派 抽象      更新时间:2023-10-16

我的组具有以下结构的代码

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是否具有相同的内存布局?

这是合法的,但似乎你不需要它。额外继承的意义何在?

此外,BaseDerived 没有任何虚拟方法,因此通过添加任何方法,您可以 99% 确定内存布局不会相同。

是的,这是允许的。 但一般的做法是避免任何形式的具体基类(例如,参见Scott Meyers的更有效C++的第33项)。

试图通过存储二进制表示来持久化复杂对象必然会导致各种问题;我建议找到一种更好的机制(序列化等)。