vector父类类型可以存放子类吗_C++小知识系列之“父类指针”和dynamic_cast!
时间: 2023-12-02 10:03:26 浏览: 275
可以,因为子类对象可以自动转换为父类对象,所以可以将子类对象赋值给父类对象。但是,如果你想使用父类指针来操作子类对象,需要使用动态类型识别(dynamic_cast)来进行类型转换,否则可能会导致类型不匹配的错误。举个例子,假设有一个父类Animal和一个子类Cat,那么可以使用下面的代码将Cat对象存储在Animal类型的vector中:
```
std::vector<Animal*> animals;
Cat* cat = new Cat();
animals.push_back(cat);
```
但是如果你想通过父类指针来访问Cat对象中的特定方法,需要使用dynamic_cast来将Animal类型的指针转换为Cat类型的指针,例如:
```
for (Animal* animal : animals) {
Cat* cat = dynamic_cast<Cat*>(animal);
if (cat != nullptr) {
// 调用Cat特定的方法
cat->meow();
}
}
```
这样就可以安全地访问Cat对象的方法,并且如果animal实际上不是Cat类型,则dynamic_cast将返回nullptr,避免了类型不匹配的错误。
阅读全文