next up previous contents
Next: Implementação Up: Empacotamento de classes Previous: Empacotamento de classes   Sumário

Cabeçalhos

Como na linguagem C, C ++ faz amplo uso da definição de arquivos de cabeçalhos6.2, usualmente com nome com o sufixo ``.h'' e incluídos no início de arquivos de código fonte com a diretiva #include.

No caso de C ++, cabeçalhos são usados para conter declarações de classes -- usualmente, um arquivo para cada classe. Em geral, definições dos métodos não são incluídas em cabeçalhos, mas sim mantidas em um arquivo à parte (o arquivo de implementação, discutido na próxima seção).

Considere o exemplo apresentado no Capítulo [*], com definições das classes vehicle, car e truck. Pela estratégia de empacotamento, três arquivos de cabeçalho seriam criados -- por exemplo, vehicle.h, car.h e truck.h, respectivamente. Mais ainda, os cabeçalhos car.h e truck.h devem incluir a linha

#include ``vehicle.h''
antes das declarações das classes, uma vez que a definição da classe base é necessária para a definição de suas classes derivadas.

A observação acima revela um problema potencial. Em uma aplicação que inclua dois mais dos cabeçalhos acima, um erro de compilação seria gerado por estar definindo a classe base mais de uma vez. A solução para evitar este problema, adotada também em ANSI-C, é usar as diretivas de pré-processamento #define e #ifdef juntamente com uma ``variável de controle'': quando um cabeçalho é incluído pela primeira vez, a variável de controle não estará definida; assim, o segmento do arquivo de cabeçalho com a definição da classe é incluído e a variável de controle é definida. Caso contrário, a variável de controle já estará definida, e o restante do arquivo de cabeçalho (a declaração da classe) pode ser ignorado.

O exemplo abaixo ilustra a utilização desta técnica na codificação do cabeçalho vehicle.h:

indentation

// vehicle header file
#ifndef VEHICLE_H
#define VEHICLE_H

class vehicle {
protected:
int wheels;
float weight;
public:
void initialize(int in_wheels, float in_weight);
int get_wheels(void);
float get_weight(void);
float wheel_loading(void);
};

#endif

next up previous contents
Next: Implementação Up: Empacotamento de classes Previous: Empacotamento de classes   Sumário
Ivan Luiz Marques Ricarte 2001-06-01