【问题标题】:Polymorphism Design多态性设计
【发布时间】:2013-05-06 18:56:45
【问题描述】:

我正在尝试决定是否对我的问题使用多态性。下面是一个类似于我为这个问题而创建的问题的虚拟问题:

假设我有一个派生类 Rectangle、Triangle 和 Circle 的基类 Shape。它们都实现了一个 Area() 函数。我有 n 个形状向量; vector<Shape*> v_1, v_2, v_3, ..., v_n。我想要的输出是vector<Rectangle*> maxrec,它存储每个v_1, v_2, ..., v_n 中最大区域的形状,只有当它是一个矩形时。 (比如v_i中的最大面积Shape是一个Rectangle,我把它加到maxrec中,如果不是,我就不加了。)

由于输入是vector<Shape*>,在将Shape* 元素添加到Rectangle* 元素之前,是否可以将其转换为maxrec?还是我在这里遗漏了设计缺陷?多态性合适吗? (算法部分我没有问题,只是多态设计部分。)

【问题讨论】:

    标签: c++ polymorphism


    【解决方案1】:

    您必须考虑的是“形状”实际上将共享任何功能或字段。例如,它们都有面积(即使以不同的方式计算),但我认为这不一定足以证明父类的合理性。我认为了解这些形状的作用对于证明是否使用多态性很重要。

    【讨论】:

      【解决方案2】:

      将任何 Shape* 转换为 Rectangle* 是不可接受的。您需要使用 dynamic_cast 运算符。例如:

      Shape *shape=...;
      Rectangle *rec=dynamic_cast<Rectangle*>(shape); 
      

      如果 shape 确实是一个 Rectangle,那么你将在 rec 中有一个指向 Rectangle 的有效指针,否则 rec 将为 NULL。

      【讨论】:

      • 如果我错了,请有人纠正我,但我认为他的问题比编程细节更具风格
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      相关资源
      最近更新 更多