/ / Polymorphism Design - c ++, polimorfismo

Polimorfismo Design - c ++, polimorfismo

Eu estou tentando decidir se devo ou não usar o polimorfismo para o meu problema. Abaixo está um problema fictício semelhante ao meu problema que criei para o bem desta questão:

Vamos dizer que eu tenho uma classe base Shape com classes derivadas Rectangle, Triangle e Circle.Todos eles têm uma função Area () implementada.Eu tenho n vetores de Shapes; vector<Shape*> v_1, v_2, v_3, ..., v_n. A saída que eu quero é vector<Rectangle*> maxrec, que armazena a forma da área máxima em cada v_1, v_2, ..., v_n somente se for um retângulo. (Por exemplo, se a área máxima Forma em v_i é um retângulo, eu adiciono no maxrec. Se não, eu não faço.

Como a entrada é vector<Shape*>, é aceitável lançar um Shape* elemento para um Rectangle* elemento antes de adicioná-lo a maxrec? Ou há uma falha de design que estou perdendo aqui? O polimorfismo é apropriado? (Eu não tenho um problema com a parte algorítmica, apenas a parte do projeto de polimorfismo).

Respostas:

0 para resposta № 1

O que você tem que pensar é sobre as "formas"realmente vai compartilhar quaisquer funções ou campos. Por exemplo, todos eles terão área (mesmo se calculada de maneiras diferentes), mas não acho que isso seja necessariamente suficiente para justificar uma classe pai. Acho importante que saibamos qual será o papel dessas formas. justificar o uso de polimorfismo ou não.


0 para resposta № 2

Não é aceitável converter qualquer Shape * em Retângulo *. Você precisaria usar o dynamic_cast operador. Por exemplo:

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

Se a forma for realmente um retângulo, você terá um ponteiro válido para um retângulo no rec, caso contrário rec será NULL.