純粋な仮想インターフェイスの実装をcppに入れて、ヘッダーファイルを完全にスキップすることをお勧めしますか?
A.h
struct A
{
virtual void func() = 0;
};
B.cpp
class B : public A
{
virtual void func() override {
...
}
}
純粋な仮想インターフェイスの実装をcppに入れて、ヘッダーファイルを完全にスキップすることをお勧めしますか?
A.h
struct A
{
virtual void func() = 0;
};
B.cpp
class B : public A
{
virtual void func() override {
...
}
}
誰かがクラスを使用する必要があり、. たとえば、次のようにすることができます。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(); }
一方、これは のインスタンスしか返さないため、非常に「弱い」ファクトリ関数ですB。Aおそらく、そのパラメーターに従って異なる派生クラスを作成する別のファクトリー関数がどこかにあるでしょう。その関数には 、 などを含める必要がありA.hますがB.h、のインスタンスを作成するためC.hに常に を使用する場合、 のクラス定義は必要ありません。その場合、クラス定義が にのみ存在するのは問題ありません。BfactoryBBB.cpp
ところで、工場から生のポインターを返しました。実際には、unique_ptrまたはその他のスマート ポインターを返すことを好むかもしれません。そうすれば、実際には .NET での仮想デストラクタの必要性を回避できAます。しかし、それだけの価値があるとは思えません。