抽象クラスとベクトル
オブジェクト指向プログラミングでは、抽象クラスは、さまざまなクラス間で共通の動作を定義するための青写真として機能します。ただし、抽象クラスのベクトルをインスタンス化しようとすると、問題が発生する可能性があります。
ベクトルでは、その要素がメモリを割り当てられる具体的なオブジェクトである必要があるため、「抽象クラスをインスタンス化できません」というエラーが発生します。一方、抽象クラスは、オーバーライドする必要がある純粋な仮想関数が含まれているため、直接インスタンス化することは意図されていません。
これを克服するには、回避策として、抽象クラスを、提案されているように、必要な仮想関数:
class IFunnyInterface { public: virtual void IamFunny() { throw new std::exception("not implemented"); } };
ただし、このアプローチは、抽象ベースでは回避できる不要な実装詳細を導入するため、望ましくない可能性があります。 class.
より C の慣用的な解決策は、抽象クラスへのポインターのベクトルを使用することです。
std::vector<IFunnyInterface*> ifVec;
これにより、ポリモーフィックな動作が可能になり、オブジェクトのスライスが防止されます。抽象クラスへのポインターは派生クラスのオブジェクトを格納できるため、各型の特定の機能へのアクセスを維持できます。
以上がC で抽象クラスのベクトルを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。