Polimorfismo - Uma visão em C++ e Java

Artigo que aborda o tema Polimorfismo e como é sua utilização em Programação Orientada a Objetos, com a implantação de exemplos em C++ e Java.

[ Hits: 43.376 ]

Por: Matheus Santana Lima em 27/11/2008


Implantação em C++



#import <cstdlib>
#import <iostream>
#import <string.h>

using namespace std;

class CorpoCeleste{
  protected:
     float massa;
     float raio;
     string tipo;
  public:
     CorpoCeleste(float,float,string);
     virtual void orbita() =0; //Criando o método abstrato orbita.
     virtual void display() =0; //Criando o método abstrato display, para imprimir na tela as informações.
};

CorpoCeleste :: CorpoCeleste(float m, float r, string t){

     massa = m;
     raio = r;
     tipo = t;
}

class Planeta: public CorpoCeleste{

  public:
     Planeta(float m2, float r2, string t2):CorpoCeleste(m2,r2,t2){};//Aqui chamamos o construtor da classe CorpoCeleste.
     void atmosfera(); //Atmosfera é exclusivo de planetas.
     void orbita(); //Definindo o método orbita.
     void display(); //Definindo o método display, para imprimir na tela as informações.
};


void Planeta :: orbita(){

    cout << "Orbita eliptica" << endl;
}

void Planeta :: display(){

    cout << "Massa: " << massa << endl;
    cout << "Raio: " << raio << endl;
    cout << "Tipo: " << tipo << endl;
}
void Planeta :: atmosfera(){
    cout << "Atmosfera gasosa, composta de Oxigênio, Ozônio, Dioxido de Carbono, dentro outros em menor proporção" << endl;

}

class Cometa: public CorpoCeleste{
  private:
    int orb;
  public:
    Cometa(float m2, float r2, string t2):CorpoCeleste(m2,r2,t2){}; //Aqui chamamos o construtor da classe CorpoCeleste.
    void Setorb(int);
    void orbita(); //Definindo o método orbita.
    void display(); //Definindo o método display, para imprimir na tela as informações.
};
void Cometa :: orbita(){
    if(orb==1)
                cout << "Órbita elipsóide" << endl;
            else
               cout <<"Órbita hiperbólica" << endl;
}

void Cometa :: Setorb(int o){

   orb = o;
}
void Cometa :: display(){
   cout << "Massa: " << massa << endl;
   cout << "Raio: " << raio << endl;
   cout << "Tipo: " << tipo << endl;
}

int main(){

Planeta Terra(57942,2345,"Planeta Rochoso");
Terra.display();
Terra.atmosfera();
cout << "--------------------" << endl;
Cometa Halley(22,55,"Cometa Periódico");
Halley.Setorb(1);
Halley.orbita();
Halley.display();
}

Se quiséssemos, poderíamos instanciar a classe Corpo Celeste, usando ponteiros no int main(), fazendo por exemplo:

CorpoCeleste *cp;
cp = &Terra;
cp->display();

Página anterior     Próxima página

Páginas do artigo
   1. O que é Polimorfismo
   2. Classes e métodos abstratos em Java e C++
   3. Implantação em C++
   4. Implantação em Java
Outros artigos deste autor

Análise do Seamonkey - A evolução da espécie

NFS simples e fácil usando Mandriva e Kurumin

Certificação Linux, minha experiência com a LPI 101

Apresentando e pondo a prova o Mono

Manipulação de arquivos em C++

Leitura recomendada

Certificação Java - 1 - Java Programming Language Keywords (Exam Objective 4.4)

Introdução a eXtreme Programming (XP) e instalação do ANT + JUnit

Certificação Java - 2 - Literals and Ranges of All Primitive Data Types (Exam Objective 4.6)

Entendendo POO (História e conceitos)

Modelos de desenvolvimento

  
Comentários
[1] Comentário enviado por femars em 27/11/2008 - 17:36h

Opa... mto legal e bem feito... parabens!
[]'s
Xiiico/Libra!

[2] Comentário enviado por edgurgel em 08/12/2008 - 17:28h

Na implementação em C++, o construtor da classe abstrata deve ser protegido, pois ele só será chamado na hora da construção dos filhos. Não faz sentido ser public.

[3] Comentário enviado por matheusslima em 08/12/2008 - 21:04h

Sou obrigado a discordar de voce, os metodos declarados na classe base sao abstratos(funçao virtual pura) e consequentemente a classe base é uma classe abstrata, e como tal não pode ser instanciada como um objeto. Este é um dos conceitos base do Polimorfismo que você esqueceu.

[4] Comentário enviado por danltmz em 28/09/2009 - 21:34h

"Sou obrigado a discordar de voce, os metodos declarados na classe base sao abstratos(funçao virtual pura) e consequentemente a classe base é uma classe abstrata, e como tal não pode ser instanciada como um objeto. Este é um dos conceitos base do Polimorfismo que você esqueceu. "


Exato :)


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts