C++
Home

Separando a interface da implementação

Agora que sabemos o princípio básico para criarmos classes, temos que ter em menta também princípios de boa engenharia de sofware.
C++ é muito robusto e possíbilita a separação de interface da implementação.

Isto é feito com o uso de arquivos .h, que são conhecidos como arquivos cabeçalho.
A classe é escrita em um arquivo cabeçalho.
Suas funções são escritas em um arquivo .cpp comum, só que com o mesmo nome do arquivo cabeçalho.

Vamos ver como ficaria a calculadora com separação de interface da implementação.
Obs: você deve estudar seu compilador para que ele consiga determinar como compilar e ligar arquivos com múltiplos arquivos-fontes.

// Esse é o arquivo calculadora.h

#ifndef CALCULADORA1_H
#define CALCULADORA1_H

class calculadora {
public:
   calculadora();        // construtor ( sem retorno, sem void )
   int soma( int, int );
   int sub ( int, int );
   int mult( int, int );
   int div ( int, int );

private:
   int num1;    // fora dos membros não é possivel ter acesso ao esses dados
   int num2;
};

#endif

-----------------------------
// Esse é o arquivo calculadora.cpp

#include "calculadora.h"

calculadora::calculadora()
{
   num1 = num2 = 0;
}

calculadora::soma( int a, int b )
{
   return a + b;
}

calculadora::sub ( int a, int b )
{
   return a - b;
}

calculadora::mult( int a, int b )
{
   return a * b;
}

calculadora::div ( int a, int b )
{
   return a / b;
}

-----------------------------
// Esse é o arquivo main.cpp, ou o arquivo principal

#include <iostream>
using std::cout;
using std::endl;

#include "calculadora.h"

int main()
{
   calculadora calc;

   cout << calc.soma(10, 5) << endl;
   cout << calc.sub (10, 5) << endl;
   cout << calc.mult(10, 5) << endl;
   cout << calc.div (10, 5) << endl;

   std::cin;
   return 0;
}

Ok, vamos começar pelo comando #ifndef CALCULADORA1_H, este é uma diretiva para o pré-processador. O nome dela ira sempre ter o _ ( underline ) no lugar do . ( ponto ) .
Essa diretiva verifica se o arquivo cabeçalho já foi incluido. Ou seja, esse comando evita que o arquivo cabeçalho seja incluido no codigo do programa mais de uma vez.
Caso ele ainda não foi incluido, será executado o proximo comando, #define CALCULADORA1_H. Este define o arquivo calculadora.h e seus comandos ( a classe ) são inseridos.
E por ultimo temos o #endif, que é o final do teste #ifndef .

Nos arquivos calculadora.cpp e main.cpp vemos uma inclusão de uma forma diferente, #include "calculadora.h", todo arquivo .h é incluido desta forma.