Ajuda/Dúvida classes c++ - Urgente

Luckas

Membro
Bem estou com um problema que ao consigo resolver:
tenho 3 classes classe Forma, quadrado e circulo;
quadrado e circulo derivam de Forma;
set_raio(int) é um membro-funçao da classe circulo

O que eu precisava de fazer era o seguinte:
se eu tiver um vector de formas f1 e quiser alterar o raio de um circulo c1

...

vector<Forma *> f1;
circulo c1();

f1.push_back(c1);
f1[0]->set_raio(5)
; //função errada. formas não possui nenhum membro set_raio(int);

...
como faço para alterar o raio do circulo já depois de ele estar no vector de apontadores para objectos do tipo Forma?

Agradeço desde já toda a ajuda que me puderem dar! ;)
 
Uma vez que adicionaste conhecimento na sub-classe Circulo e essa informação não está presente em Forma, isso vai dar erro, pois o polimorfismo que pretendes aplicar ao inserir círculos num vector de formas não vai funcionar correctamente. A maneira mais correcta de resolver isso é tornar Forma numa classe abstracta, definindo o método set_raio como abstracto nela. Assim, podes fazer atribuições do tipo Forma f = new Circulo (...), e invocar f.set_raio, pois o algoritmo de verificação de tipo dinâmico aka dynamic binding (em Forma f = new Circulo -> Forma = tipo estático. Circulo = tipo dinâmico), juntamente com o polimorfismo, vão tratar de encontrar o código do método set_raio na classe Circulo, garantindo-se o princípio da substituição.
 
Última edição:
Back
Topo