純粋な仮想インターフェイスの実装を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 {
...
}
}
誰かがクラスを使用する必要があり、. たとえば、次のようにすることができます。B
B
A*
ああ
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
に常に を使用する場合、 のクラス定義は必要ありません。その場合、クラス定義が にのみ存在するのは問題ありません。Bfactory
B
B
B.cpp
ところで、工場から生のポインターを返しました。実際には、unique_ptr
またはその他のスマート ポインターを返すことを好むかもしれません。そうすれば、実際には .NET での仮想デストラクタの必要性を回避できA
ます。しかし、それだけの価値があるとは思えません。