C++ 多态性设计
我正在尝试决定是否使用多态性来解决我的问题。下面是一个虚拟问题,类似于我为这个问题创建的问题: 假设我有一个基类形状,派生类有矩形、三角形和圆形。它们都实现了Area()函数。我有n个形状向量<代码>向量v_1,v_2,v_3,…,v_n。我想要的输出是C++ 多态性设计,c++,polymorphism,C++,Polymorphism,我正在尝试决定是否使用多态性来解决我的问题。下面是一个虚拟问题,类似于我为这个问题创建的问题: 假设我有一个基类形状,派生类有矩形、三角形和圆形。它们都实现了Area()函数。我有n个形状向量向量v_1,v_2,v_3,…,v_n。我想要的输出是vector maxrec,它只在每个v_1,v_2,…,v_n为矩形时存储最大面积的形状。(例如,如果v_i中的最大面积形状是矩形,我将其添加到maxrec。如果不是,我就不添加。) 由于输入是向量,在将形状*元素添加到矩形*元素之前,是否可以将其强制
vector maxrec
,它只在每个v_1,v_2,…,v_n
为矩形时存储最大面积的形状。(例如,如果v_i
中的最大面积形状是矩形,我将其添加到maxrec。如果不是,我就不添加。)
由于输入是
向量
,在将形状*
元素添加到矩形*
元素之前,是否可以将其强制转换为矩形*
元素?还是我在这里遗漏了一个设计缺陷?多态性是否合适?(我对算法部分没有问题,只是多态性设计部分。)你要考虑的是“形状”实际上会共享任何函数或字段。例如,它们都有面积(即使以不同的方式计算),但我认为这不足以证明父类的合理性。我认为重要的是,我们要知道这些形状的作用是什么,以证明是否使用多态性。将任何形状*转换为矩形*是不可接受的。您需要使用dynamic\u cast
操作符。例如:
Shape *shape=...;
Rectangle *rec=dynamic_cast<Rectangle*>(shape);
Shape*Shape=。。。;
矩形*rec=动态_铸造(形状);
如果形状真的是一个矩形,您将在rec中有一个指向矩形的有效指针,否则rec将为空。如果我错了,有人会纠正我,但我认为他的问题比编程细节更具风格