Ir para conteúdo
Fórum Script Brasil
  • 0

Polimorfismo Em C++ Não Entendi Direito.


Luiz_Junior

Pergunta

Bem gente o código eu não entendi muito bem sobre Polimorfismo, achei meio complicado, se alguém puder explicar ai e comentar eu agradeço muito. wink.gif

#include <iostream>

#include <conio.h>

using namespace std;

class pai{

protected:

  int j,k;

public:

  void setJ(int new j);

  void setK(int new k);

  int setJ();

  int setK();

};

class filha:{

  public pai{

  protected:

    int m,n;

  public:

    void setM(int new m);

    void setN(int new n);

 

    int getM();

    int getN();

};

void pai::setJ(int new j)

{

j=new j;

}

void pai::setK(int new k)

{

k-new k;

}

int pai::getJ()

{

return j;

}

int pai::getK()

{

return k;

}

void filha::setM(int new m)

{

m=newm;

}

void filha::setN(int new n);

{

n=new n;

}

int filha::getM()

{

return m;

}

int filha::getN()

{

return n;

}

  int main(){

  pai prnt,prntl;

  filha chld, chldl;

 

  prnt=chld;

  pai*pp=&chld;

  pai& rr=chld;

  pp=&prntl;

  pp=&&chldl;

   

  pai* list[4];

  list[0]=&prnt;

  list[1]=&chdld;

  list[2]=&prntl;

  list[3]=&chldl;

}

Pronto o código é esse ai sobre Polimorfismo. tongue.gif

alguém ajudae gente, quanto mais ajuda melhor. smile.gif

Vlws

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

De onde você tirou esse código? Existem inúmeros erros nele que impedem a compilação do mesmo. De qualquer forma, consegui fazê-lo funcionar e segue abaixo o código:

#include <iostream>
#include <conio.h>
using namespace std;

class pai{
    protected:
        int j,k;
    public:
        void setJ(int j);
        void setK(int k);
        int getJ();
        int getK();
};

class filha : public pai {
    protected:
        int m,n;
    public:
        void setM(int m);
        void setN(int n);
      
        int getM();
        int getN();
};

void pai::setJ(int j)
{
    this->j=j;
}
void pai::setK(int k)
{
    this->k=k;
}
int pai::getJ()
{
    return j;
}
int pai::getK()
{
    return k;
}
void filha::setM(int m)
{
    this->m=m;
}
void filha::setN(int n)
{
    this->n=n;
}
int filha::getM()
{
    return m;
}
int filha::getN()
{
    return n;
}

int main() {
  pai prnt,prntl;
  filha chld, chldl;
  
  prnt = chld;
  pai *pp = &chld;
  pai &rr = chld;
  pp = &prntl;
  pp = &chldl;
    
  pai* list[4];
  list[0]=&prnt;
  list[1]=&chld;
  list[2]=&prntl;
  list[3]=&chldl;
}

A idéia desse código, e consequentemente do polimorfismo, é mostrar que duas classes são intercambiáveis no sentido da classe paterna. Em outras palavras, é dizer que um objeto da classe pai pode referenciar a um objeto da classe filha, desde que esta herde a primeira. Trazendo para um outro exemplo, acho que fica melhor de compreender. Imagine duas classes, chamadas Empregado e Gerente. É fácil compreender que todo gerente *é* um empregado, mas que *nem todo* empregado é um gerente. Portanto, a classe Gerente (e quaisquer outras classes que possamos imaginar, como Atendente, Programador, Digitador, Vendedor, etc.) vai herdar os métodos e atributos provenientes de Empregado. Supondo que em algum lugar do código eu precise passar um argumento cujo valor vai ser de um empregado qualquer, como eu o definiria? Eu teria que ter uma função (método) para cada um dos tipos (Gerente, Programador, Atendente, etc.)? Obviamente que isto seria custoso, portanto, já que todos eles (os tipos) são subclasses ("filhos") de Empregado, basta que eu defina esse tipo e poderei passar qualquer um deles. Poli = "muitos/muitas", morfo = "forma", portanto polimorfo significa "muitas formas". E é exatamente isso que se tem: um único objeto (Empregado) pode ter várias formas (Gerente, Atendente, Programador, Vendedor). Sacou? wink.gif

Não sou nenhum expert em OO, mas é assim que eu vejo o polimorfismo. Já vi pessoas falando que a possibilidade de um método ter várias assinaturas diferentes também é uma capacidade do polimorfismo, mas não confirmo a veracidade de tal afirmação (já que, inclusive, existe um nome para isso: "sobrecarga de métodos"). A idéia é, em sua essência, a mesma acima, todavia só se aplica aos métodos e não aos objetos em si.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...