0

私の問題にポリモーフィズムを使用するかどうかを決定しようとしています。以下は、この質問のために作成した私の問題に似たダミーの問題です。

派生クラス 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(たとえば、Shape の最大領域v_iが Rectangle の場合、それを maxrec に追加します。そうでない場合は追加しません。)

入力がであるため、要素をに追加する前に要素を要素vector<Shape*>にキャストすることは許容されますか? または、ここで見逃している設計上の欠陥はありますか? ポリモーフィズムは適切ですか?(アルゴリズムの部分には問題はありません。ポリモーフィズムの設計部分だけです。)Shape*Rectangle*maxrec

4

2 に答える 2

0

あなたが考えなければならないのは、実際に機能やフィールドを共有する「形状」です。たとえば、それらはすべて(異なる方法で計算されたとしても)面積を持ちますが、親クラスを正当化するには必ずしも十分ではないと思います。ポリモーフィズムを使用するかどうかを正当化するために、これらの形状の役割がどうなるかを知ることが重要だと思います。

于 2013-05-06T18:59:11.603 に答える
0

Shape* を Rectangle* にキャストすることはできません。dynamic_cast演算子を使用する必要があります。例えば:

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

shape が本当に Rectangle の場合、rec に Rectangle への有効なポインターが含まれます。そうでない場合、rec は NULL になります。

于 2013-05-06T19:00:05.387 に答える