多态性设计
Polymorphism Design
本文关键字:多态性 更新时间:2023-10-16
我正试图决定是否使用多态性来解决我的问题。下面是一个类似于我为这个问题创建的问题的伪问题:
假设我有一个基类Shape,它包含派生类Rectangle、Triangle和Circle。它们都实现了一个Area((函数。我有n个形状向量;CCD_ 1。我想要的输出是vector<Rectangle*> maxrec
,它只在每个v_1, v_2, ..., v_n
是矩形的情况下存储最大面积的Shape。(例如,如果v_i
中的最大面积Shape是矩形,我会将其添加到maxrec。如果不是,我不会。(
由于输入是vector<Shape*>
,在将Shape*
元素添加到maxrec
之前,将其强制转换为Rectangle*
元素是否可以接受?还是我在这里遗漏了一个设计缺陷?多态性合适吗?(我对算法部分没有问题,只是多态性设计部分。(
您需要考虑的是,"Shapes"是否将实际共享任何函数或字段。例如,它们都有面积(即使以不同的方式计算(,但我认为这不一定足以证明父类的合理性。我认为重要的是,我们要知道这些形状的作用是什么,以证明是否使用多态性。
将任何形状*强制转换为矩形*都是不可接受的。您需要使用dynamic_cast
运算符。例如:
Shape *shape=...;
Rectangle *rec=dynamic_cast<Rectangle*>(shape);
如果形状真的是矩形,则rec中将有一个指向矩形的有效指针,否则rec将为NULL。
相关文章:
- 多态性和功能结合
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- C++boost序列化多态性问题
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- 如何在多线程中正确使用unique_ptr进行多态性?
- 具有智能指针的多态性
- 在 C++ 中在堆栈上创建实例时如何保持多态性?
- 继承/多态性 - 我是否被迫使用"protected"变量?
- C++ 多态性在代码::块 17.12 中不起作用
- C++ 泛型和多态性:这种模式可行吗?
- 为什么我们实际上需要运行时多态性?
- 如何在这个简单的最小示例中实现多态性?
- 如何使用静态多态性在 int 和指针类型之间进行转换?
- 无法初始化已知大小的矢量指针,该大小不会因多态性而更改
- 运行时多态性和dynamic_cast需要澄清
- 如何调用指针类型的方法(禁用多态性)?
- 从基类调用函数的多态性
- 运行时多态性 - 箭头运算符访问了错误的成员?
- 为什么我在虚幻引擎中的多态性和接口方面遇到问题?