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)
您需要创建一个指针数组Cat:
Cat** catArray = new Cat*[200];
Run Code Online (Sandbox Code Playgroud)
即使基类Cat是具体的,如果你创建了一个数组,你仍然可以直接进入对象切片Cat.
请注意,您应该使用std::vector而不是数组,并且应该使用智能指针来确保您的代码是异常安全的.