1

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

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

4

2 回答 2

3

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

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

于 2012-05-03T13:26:14.610 回答
1

是的,这是允许的。但一般做法是避免使用任何类型的具体基类(参见 Scott Meyers' More Effective C++的第 33 条)。

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

于 2012-05-03T13:22:50.417 回答