helldanger1
GForum VIP
- Entrou
- Ago 1, 2007
- Mensagens
- 29,631
- Gostos Recebidos
- 1
O padrão ao se escrever em C++ aconselha a declaração de uma classe no cabeçalho e sua implementação em um arquivo .cpp. Isso, em primeiro lugar, é uma questão de organização e não uma restrição do compilador ou da linguagem.
Digamos que você queira fornecer uma biblioteca para programadores, mas não deseja mostrar como a fez, por que sua intenção é vendê-la.
O que fazer? Declarar a classe com seus métodos e atributos em um arquivo (header) e a implementação (o fonte propriamente dito) em outro. Você apenas forneceria os headers e a biblioteca.
Note que, se você usa uma biblioteca com direitos autorais contra copia, você só tem arquivos de biblioteca e arquivos headers, mas não possui a sua implementação.
Mas como funciona isso tudo?
Vocês que vem do C, sabem que o compilador da Borland requer protótipos de função. Caso ele encontre uma chamada a uma função f() que ele desconheça o protótipo, ocorre um erro.
Veja uma declaração de classe como se fosse um protótipo. Antes de qualquer implementação ser avaliada pelo compilador, ele procura pela respectiva declaração. Se não encontrá-la, gera um erro.
No entanto, para uma definição de classe contida na declaração da mesma (calma, tem um exemplo logo abaixo), o compilador não se irrita, e cria o seu ansiado arquivo-objeto.
Pensando assim, poderemos pensar no que pode ser feito.
Há algo de errado em colocar a implementação contida na definição (em apenas um arquivo)? De forma alguma. Uma nota para usuários Borland: para códigos de implementação (códigos que envolvem atribuição, implementação de métodos, etc) faca-os em um arquivo .cpp. Arquivos headers não são compilados. ( bcc32 –c arquivo.h : *ERROR* ) a não ser que se forneça um command-line option indicando ao compilador para que ele *não* reconheça arquivos .h como headers.
Ok, um arquivo .cpp contendo uma implementação de classe, sem declaração (analogamente, em C, isso é o mesmo que definir uma função antes da função main()). Não precisa declarar um protótipo extra.
Digamos que você queira fornecer uma biblioteca para programadores, mas não deseja mostrar como a fez, por que sua intenção é vendê-la.
O que fazer? Declarar a classe com seus métodos e atributos em um arquivo (header) e a implementação (o fonte propriamente dito) em outro. Você apenas forneceria os headers e a biblioteca.
Note que, se você usa uma biblioteca com direitos autorais contra copia, você só tem arquivos de biblioteca e arquivos headers, mas não possui a sua implementação.
Mas como funciona isso tudo?
Vocês que vem do C, sabem que o compilador da Borland requer protótipos de função. Caso ele encontre uma chamada a uma função f() que ele desconheça o protótipo, ocorre um erro.
Veja uma declaração de classe como se fosse um protótipo. Antes de qualquer implementação ser avaliada pelo compilador, ele procura pela respectiva declaração. Se não encontrá-la, gera um erro.
No entanto, para uma definição de classe contida na declaração da mesma (calma, tem um exemplo logo abaixo), o compilador não se irrita, e cria o seu ansiado arquivo-objeto.
Pensando assim, poderemos pensar no que pode ser feito.
Há algo de errado em colocar a implementação contida na definição (em apenas um arquivo)? De forma alguma. Uma nota para usuários Borland: para códigos de implementação (códigos que envolvem atribuição, implementação de métodos, etc) faca-os em um arquivo .cpp. Arquivos headers não são compilados. ( bcc32 –c arquivo.h : *ERROR* ) a não ser que se forneça um command-line option indicando ao compilador para que ele *não* reconheça arquivos .h como headers.
Ok, um arquivo .cpp contendo uma implementação de classe, sem declaração (analogamente, em C, isso é o mesmo que definir uma função antes da função main()). Não precisa declarar um protótipo extra.