Jump to content
Fórum Script Brasil
  • 0
Sign in to follow this  
Luiz_Junior

Polimorfismo Em C++ Não Entendi Direito.

Question

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

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Cloud Computing


  • Forum Statistics

    • Total Topics
      148131
    • Total Posts
      643434
×
×
  • Create New...