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; 
}; 

そして、 oldDerivedを から継承するように変更しIDerivedます。この種の具象->抽象->具象継承構造はC ++でも許可されていますか?

さらに悪いことに、元のクラスはフレームワーク内で永続化されるため、メモリ内で同じ構造を維持する必要があります (これは、抽象化Derivedすることで達成したいと考えていました)。IDerived新しいDerivedものは同じメモリ レイアウトを持ちますか?

4

2 に答える 2

3

それは合法ですが、あなたがそれを必要としているようには見えません。追加の継承のポイントは何ですか?

さらに、Base仮想Derivedメソッドがないため、仮想メソッドを追加することで、メモリレイアウトが同じにならないことを99%確信できます。

于 2012-05-03T13:26:14.610 に答える
1

はい、許可されています。しかし、一般的な慣行は、どのような種類の具体的な基本クラスも避けることです (たとえば、Scott Meyers のMore Effective C++の Item 33 を参照してください)。

バイナリ表現を格納して複雑なオブジェクトを永続化しようとすると、あらゆる種類の問題が発生します。より良いメカニズム(シリアル化など)を見つけることをお勧めします。

于 2012-05-03T13:22:50.417 に答える