1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ajuda/Dúvida classes c++ - Urgente

Discussão em 'Programação' iniciada por Luckas, 10 de Novembro de 2008. (Respostas: 2; Visualizações: 704)

  1. 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! ;)
     
  2. Baderous

    Baderous Banido

    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: 10 de Novembro de 2008
  3. Valeu pela ajuda tão rápida. Problema resolvido.
    Muito Obrigado.
     

Partilhar esta Página