Curso de Extensão: Linguagem de Programação C++ (Básico)


Faculdade de Informática, PUCRS, Porto Alegre, RS

Coordenação: Isabel Harb Manssour


Instrutores: Eduardo Bezerra e Cristiane Woszezenki



Separando as classes da implementação


As classes, como as estruturas (struct) definem novos tipos de dados. Em um projeto mais complexo onde se desenvolvem módulos para um programa, é necessário separar as definições (classes) de suas implementações. Desta maneira podemos refazer o programa dos veículos organizando o mesmo em três arquivos separados. Um arquivo Veiculos2.h, contendo apenas as classes (os tipos, interface de acesso ao objeto), um arquivo Veiculos2.cpp, contendo as implementações das classes e por último um arquivo chamado programa.cpp, que é o programa final (main).

Arquivo Veiculos2.h

#include <iostream>
#include <string>
using namespace std;

//Classe Base
class Veiculo {
   private:
      int motor;
      int n_rodas;
   public:
      void setNRodas(int);
      int getNRodas(void);
      int getMotor(void);
      Veiculo(int); //inicializa o motor
};

//Primeira classe derivada
class Caminhao: public Veiculo {
   private:
      int carga;
   public:
      int getCarga(void);
      void setCarga(int);
      void mostra(void);
      Caminhao(int, int);  //recebe parametros para a carga e para o motor
};

//Segunda classe derivada
class Automovel: public Veiculo {
   private:
      string tipo;
   public:
      void setTipo(string);
      string getTipo(void);
      void mostra(void);
      Automovel(int, string); //recebe parametros para motor e tipo
}; 

Arquivo Veiculos2.cpp

#include "Veiculos2.h"

void Veiculo::setNRodas(int rodas){
   n_rodas = rodas;
}

int Veiculo::getMotor(){
    return motor;   
}

int Veiculo::getNRodas(void ){
   return n_rodas;
}
Veiculo::Veiculo(int m){
    motor = m;                     
}

Caminhao::Caminhao(int m, int c): Veiculo(m){
  // Veiculo::Veiculo(m);
   carga = c;                       
}
void Caminhao::setCarga(int c){
   carga = c;
}

int Caminhao::getCarga(void){
   return carga;
}
void Caminhao::mostra(void){
   cout << "Caminhao: n rodas = " << getNRodas() 
        << ", carga = " << getCarga() << ", motor = " 
        << getMotor() << "\n" ;
}

Automovel::Automovel(int m, string t):Veiculo(m){
   tipo = t;                       
}
void Automovel::setTipo(string t){
   tipo = t;
}

string Automovel::getTipo(void){
   return tipo;
}

void Automovel::mostra(void){
   cout << "Automovel: n rodas = " << getNRodas( ) 
        << ", tipo = " << getTipo( ) << ", motor = " 
        << getMotor() << "\n";
}

Arquivo programa.cpp

#include "Veiculos2.cpp"

int main( ){
   Caminhao FNM(2,4000);
   Automovel Fusca(3, "SEDAN");

   FNM.setNRodas(12);
   //FNM.setCarga(3000);
   FNM.mostra( );

   Fusca.setNRodas(4);
   //Fusca.setTipo("SEDAN");
   Fusca.mostra( );
   getchar();
   return 0;
}