2013-05-06 76 views
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中存儲最大面積的形狀。 (例如,如果在v_i最大區域形狀是矩形,我將其添加到maxrec,如果沒有,我不知道。)

由於輸入是vector<Shape*>,它是可以接受的一個Shape*元件轉換爲一個Rectangle*元素將其添加到maxrec之前?或者我在這裏錯過了一個設計缺陷?多態是否合適? (我沒有算法部分的問題,只是多態性設計部分。)

回答

0

你必須考慮的是「形狀」實際上將共享任何功能或領域。例如,他們都會有面積(即使以不同的方式計算),但我認爲這不足以證明父母的理由。我認爲了解這些形狀的作用是否能證明使用多態性是非常重要的。

0

將任何Shape *轉換爲Rectangle *是不可接受的。您將需要使用dynamic_cast運算符。例如:

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

如果形狀確實是一個矩形,你將有一個有效的指針在錄製一個Rectangle,否則REC將是NULL。

+1

有人糾正我,如果我錯了,但我認爲他的問題比編程具體更風格化 – aaronman 2013-05-06 19:00:48