2017-06-23 20 views
0

以下のコードスニペットには、継承クラスのCatとDogを持つPetsのクラスがあります。私は私のペットのすべてのセットを持っていると思います。私はオプションBを使用する場合基底クラスと継承クラスのセット

class Pet{ 
    // 
}; 

class Dog: Pet{ 
    // 
}; 
class Cat: Pet{ 
    // 
}; 

int main(
     set<Pet> a; 

     set<Pet*> b; 
) 

はもちろん、ポインター、犬や猫のいずれかが、セットにすることができますが、私はセットのコピーを作ることができるかどうかはわかりません。

同様に、私がset aのコピーを作成した場合、Cat、Dogのコピーコンストラクタはそれぞれの型の項目に対して呼び出されますか?

+1

ファンタジーコードを投稿しないでください。あなたがセットの宣言に達する前に、これはコンパイルされません。あなたは私的ではない公的継承を望んでいると感じていますか? – user463035818

答えて

0

aのセットでは、Pet秒、Cat秒、またはDog秒しか格納できません。したがって、コピーコンストラクタの質問は無関係です。

セットbでは、自然にコピーできますが、コピーには同じオブジェクトへのポインタが含まれています。さらに、これらのオブジェクトをどこかに保存する必要があります。

おそらくほしいものはset<unique_ptr<Pet>>です。それをコピーすることはできません。

ポリモフィックオブジェクトを実際にコピーする場合は、clone idiomを確認してください。

関連する問題