Linguagem de Programação C++

Universidade Federal de Santa Catarina

Departamento de Engenharia Elétrica, CTC

Prof. Eduardo Augusto Bezerra

Profa. 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;
}