Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 多态性设计_C++_Polymorphism - Fatal编程技术网

C++ 多态性设计

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。如果不是,我就不添加。) 由于输入是向量,在将形状*元素添加到矩形*元素之前,是否可以将其强制

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

假设我有一个基类形状,派生类有矩形、三角形和圆形。它们都实现了Area()函数。我有n个形状向量<代码>向量v_1,v_2,v_3,…,v_n。我想要的输出是
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将为空。

如果我错了,有人会纠正我,但我认为他的问题比编程细节更具风格