如何创建Abstract类的动态数组?

101*_*101 14 c++ arrays abstract-class abstract

假设我有一个抽象类Cat,它有一些具体的子类Wildcat,Housecat等.

我希望我的数组能够存储指向一种猫的指针,而不知道它究竟是哪种类型.

当我尝试动态分配Cat数组时,它似乎不起作用.

Cat* catArray = new Cat[200];
Run Code Online (Sandbox Code Playgroud)

Jas*_*eet 20

通过创建一个指向Cat的指针,如同

 Cat** catArray = new Cat*[200];
Run Code Online (Sandbox Code Playgroud)

现在,您可以将WildCat,HouseCat等实例放在数组中的不同位置

 catArray[0] = new WildCat();
 catArray[1] = new HouseCat();
 catArray[0]->catchMice(); 
 catArray[1]->catchMice();
Run Code Online (Sandbox Code Playgroud)

几个警告,完成后
a)不要忘记删除catArray中分配的实例,如删除catArray [0]等
.b)不要忘记删除catArray本身使用

 delete [] catArray;
Run Code Online (Sandbox Code Playgroud)

你还应该考虑使用vector来自动化b)


Jam*_*lis 7

您需要创建一个指针数组Cat:

Cat** catArray = new Cat*[200];
Run Code Online (Sandbox Code Playgroud)

即使基类Cat是具体的,如果你创建了一个数组,你仍然可以直接进入对象切片Cat.

请注意,您应该使用std::vector而不是数组,并且应该使用智能指针来确保您的代码是异常安全的.