首页 > 解决方案 > 将 Base* 转换为正确的派生类

问题描述

假设一个std::vector<Base*>, 和一组类Derived1,..., DerivedN

在运行时决定Derived*我应该dynamic_cast使用哪些类的正确/最佳架构是什么?

示例:我有以下课程:Cat, Dog,Horse等。他们都有一个 Base 类Animal。我有一个函数来创建每个派生类的实例,并且我想将指针保存在某处,例如 Bases* ptrs2derivedclesses

有没有更好的方法来保存所有派生类实例?

标签: c++inheritance

解决方案


什么是正确/最佳架构来决定我应该动态转换到哪个 Derived* 类的运行时?

正确/最好的方法是使用(纯)虚函数设计基类的适当接口。动态/静态转换有时在特殊情况下可用,但一般来说它是糟糕设计的标志。


推荐阅读