は、あなたが通常のオブジェクトを保持するために、テンプレートのコンテナを使用することになり、このように:
#include <vector>
class Cat;
class Dog;
class Animal;
typedef std::vector<Cat*> CatCollection;
typedef std::vector<Dog*> DogCollection;
typedef std::vector<Animal*> AnimalCollection;
私はコンテナとしてstd::vectorを使用しますが、利用できる他の人があります。
のように、あなたは、コンテナとしてコンテナを操作し、アイテムそのものに対して操作を実行します:特定のタイプのための特定のコレクションクラスの作成
AnimalCollection coll;
//add elements
Cat *cat = ...;
Dog *dog = ...;
coll.push_back(cat);
coll.push_back(dog);
//do something with the first item of the collection
coll[0] -> doStuff();
//do something on all items
for (Animal *c: coll) {
c -> doStuff();
}
//Don't forget to delete allocated objects one way or the other
//std::vector<std::unique_ptr<Animal>> can for example take ownership of pointers and delete them when the collection is destroyed
は、特殊なケースで行うことができますが、それは通常はありません。
Live Demo
コードを表示してください。あなたの最後の段落は私に少し混乱しています。私はこれが宿題であると理解しています。 'DogCollection'と' CatCollection'の代わりに 'AnimalCollection'を使うように求められているようですが、私はあなたの最終的な質問を理解できませんでした。 – Rotem
私はあなたが 'Dog'sと' Cat'sへのポインタを格納する 'Animal'へのポインタのコンテナを持つように頼まれています。だから、あなたは仮想ディスパッチについて話していると思います。 – lapk
私が何を探していること '犬wMyDogであると信じて、あなたは、あなたが希望インスタンスまたは一部の配列操作で特定の操作を実行する必要があるかもしれないという事実に依存し' – Ceros