2

純粋な仮想インターフェイスの実装をcppに入れて、ヘッダーファイルを完全にスキップすることをお勧めしますか?

A.h
struct A
{
    virtual void func() = 0;
};
B.cpp
class B : public A
{
   virtual void func() override {
   ...
   }
}
4

1 に答える 1

1

誰かがクラスを使用する必要があり、. たとえば、次のようにすることができます。BBA*

ああ

struct A
{
    virtual void func() = 0;
    virtual ~A() {}
};

Bh

#include "A.h"
A *Bfactory();

B.cpp

#include "B.h"
struct B : public A { ... };
A *Bfactory() { return new B(); }

一方、これは のインスタンスしか返さないため、非常に「弱い」ファクトリ関数ですBAおそらく、そのパラメーターに従って異なる派生クラスを作成する別のファクトリー関数がどこかにあるでしょう。その関数には 、 などを含める必要がありA.hますがB.h、のインスタンスを作成するためC.hに常に を使用する場合、 のクラス定義は必要ありません。その場合、クラス定義が にのみ存在するのは問題ありません。BfactoryBBB.cpp

ところで、工場から生のポインターを返しました。実際には、unique_ptrまたはその他のスマート ポインターを返すことを好むかもしれません。そうすれば、実際には .NET での仮想デストラクタの必要性を回避できAます。しかし、それだけの価値があるとは思えません。

于 2012-12-15T10:45:45.463 に答える