[英]C++ How do I create a dynamic array of objects inherited from an abstract class?
[英]Array of inherited object from abstract class C++
我正在尝试制作一组均从一个抽象类继承的不同对象。 这可能吗? 这是我所拥有的:
Human *human;
human = new Human(100,100);
Cyberdemon *cyberDemon;
cyberDemon = new Cyberdemon(100, 100);
Balrog *balrog;
balrog = new Balrog(100, 100);
Elf *elf;
elf = new Elf(100, 100);
人和精灵都继承自Creature,后者是一个抽象类。 Cyberdemon和Balrog继承自Demon类,该类也继承自Creature。 使这四个对象组成数组的最佳方法是什么?
因为我喜欢代码整洁:
Human *human = new Human(100, 100);
Cyberdemon *cyberDemon = new Cyberdemon(100, 100);
Balrog *balrog = new Balrog(100, 100);
Elf *elf = new Elf(100, 100);
std::vector<Creature*> creatureList{human, cyberDemon, balrog, elf};
或者,如果以后不再需要单独的指针,则:
std::vector<Creature*> creatureList{
new Human(100, 100),
new Cyberdemon(100, 100),
new Balrog(100, 100),
new Elf(100, 100)
};
或者,整洁又安全(感谢Kerrek SB):
std::vector<unique_ptr<Creature>> creatureList{
std::make_unique<Creature>(100, 100),
std::make_unique<Cyberdemon>(100, 100),
std::make_unique<Balrog>(100, 100),
std::make_unique<Elf>(100, 100)
};
std::vector<Creature*> creatureList;
Human *human;
human = new Human(100,100);
createList.push_back(human);
Cyberdemon *cyberDemon;
cyberDemon = new Cyberdemon(100, 100);
createList.push_back(cyberDemon);
Balrog *balrog;
balrog = new Balrog(100, 100);
createList.push_back(barlog);
Elf *elf;
elf = new Elf(100, 100);
createList.push_back(elf);
或者,稍微简化一下:
std::vector<Creature*> creatureList;
createList.push_back(new Human(100,100));
createList.push_back(new Cyberdemon(100, 100));
createList.push_back(new Balrog(100, 100));
createList.push_back(new Elf(100, 100));
如果您能够使用C ++ 11,则可以进一步简化它(感谢Chnossos)。
std::vector<Creature*> creatureList = { new Human(100,100),
new Cyberdemon(100, 100),
new Balrog(100, 100),
new Elf(100, 100) };
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.