作成したクラスを抽象クラスにし、別のクラスに拡張してもらいたいです。これは、抽象化したいクラス(ベクトル)にクラス(パーティクル)が大きく依存しているためです。
new キーワードでインスタンス化したすべてのオブジェクトをどのように使用するのか、それとも完全に台無しになるのかはわかりません。私自身の例で抽象クラスを使用することについて何かを学ぶために試してみたいと思っていますが、誰かが私がやっていることを理解するのを手伝ってくれるなら、それは素晴らしいことです!
作成したクラスを抽象クラスにし、別のクラスに拡張してもらいたいです。これは、抽象化したいクラス(ベクトル)にクラス(パーティクル)が大きく依存しているためです。
new キーワードでインスタンス化したすべてのオブジェクトをどのように使用するのか、それとも完全に台無しになるのかはわかりません。私自身の例で抽象クラスを使用することについて何かを学ぶために試してみたいと思っていますが、誰かが私がやっていることを理解するのを手伝ってくれるなら、それは素晴らしいことです!
新しいクラスが vector に依存している場合は、それを継承するのではなく、構成を試してください...つまり、独自の Queue を作成したい場合は、 vector から継承するのではなく、 vector 型のデータメンバーを持つのはお勧めできません。これには、継承よりも多くの利点があります。コンテナーを別のセットに変更する必要がある場合は、インターフェイスの変更について心配する必要はありません。クラスへの追加と削除のインターフェイスがいくつかあります。したがって、クライアント コードは、Queue の生成に使用しているコンテナーから独立しています。余談ですが、継承よりも構成を使用することを検討してください。そして、いくつかの設計パターンを見て、構成が必要な場合と継承が避けられない場合を理解してみてください。
あなたが変換しようとしていると私が理解しているところclass MyClass
からabstract class AbstractMyClass
したがって、 MyClass を抽象クラスに変換すると、次のようなすべてのステートメント
AbstractMyClass myClass=new AbstractMyClass();
AbstractMyClass のインスタンスを作成できないため、エラーが発生します。また、状況が
abstract class AbstractMyClass
{
}
class ConcreteMyClass extends AbstractMyClass
{
}
次に、次のようなことができます
AbstractMyClass abstractMyClass=new ConcreteMyClass();
または通常の
ConcreteMyClass concreteMyClass=new ConcreteMyCLass();
継承 : リレーションです。さらに重要なのは、基本クラスとサブクラスのインターフェースが同じであることです。ここでは、クライアント コードで push_back() (C++ の場合) を使用して新しい要素を追加するのではなく、add() のようなメソッドを使用します。したがって、インターフェイスが異なり、継承の間違った使用を明確に示しています。の条件」。これは効果的な C++ での Scott Mayer によるものです。あなたの場合と同様に、何らかの点で新しい DataStrucutre を実装したいと考えています。したがって、構成は必要なものです。派生クラスは同じインターフェイスを持つ必要はありません。一般に、インターフェイスが同じであることがわかった場合は、継承に似ており、合成ではない場合です。継承に対する合成の利点は他にもたくさんあります。ググるか、良いデザインの本を選んでください。