Declarações e definições (C++)
As declarações informam ao compilador que um nome ou um elemento de programa existe. As definições especificam o código ou os dados que o nome descreve. Um nome deve ser declarada antes que possa ser usado.
Declarações
Uma declaração introduz um ou mais nomes em um programa. As declarações podem ocorrer mais de uma vez em um programa. Portanto, é possível declarar classes, estruturas, tipos enumerados e outros tipos definidos pelo usuário para cada unidade de compilação. A restrição nessa declaração múltipla é que todas as declarações devem ser idênticas. As declarações também servem como definições, exceto quando a declaração:
É um protótipo de função (uma declaração de função sem o corpo da função).
Contém o especificador extern, mas não contém nenhum inicializador (objetos e variáveis) nem o corpo da função (funções). Isso significa que a definição não está necessariamente na unidade de tradução atual e atribui ao nome uma vinculação externa.
É de um membro de dados estático dentro de uma declaração de classe.
Como os membros de dados de classe estáticos são variáveis distintas compartilhadas por todos os objetos da classe, eles devem ser definidos e inicializados fora da declaração de classe. (Para obter mais informações sobre classes e membros de classe, consulte Classes.)
É uma declaração de nome de classe que não é seguida por uma definição, como class T;.
É uma instrução typedef.
Estes são exemplos de declarações que também são definições:
// Declare and define int variables i and j.
int i;
int j = 10;
// Declare enumeration suits.
enum suits { Spades = 1, Clubs, Hearts, Diamonds };
// Declare class CheckBox.
class CheckBox : public Control
{
public:
Boolean IsChecked();
virtual int ChangeState() = 0;
};
Estas são algumas declarações que não são definições:
extern int i;
char *strchr( const char *Str, const char Target );
Definições
Uma definição é uma especificação exclusiva de um objeto ou variável, função, classe ou enumerador. Como as definições devem ser exclusivas, um programa só pode conter uma definição para um dado elemento do programa. Pode haver uma correspondência muitos para um entre declarações e definições. Há dois casos em que um elemento do programa pode ser declarado e não definido:
Uma função é declarada mas nunca referenciada com uma chamada de função ou com uma expressão que usa o endereço da função.
Uma classe é usada somente de um modo que não exige que sua definição seja conhecida. No entanto, a classe deve ser declarada. O código a seguir ilustra esse caso:
// definitions.cpp class WindowCounter; // Forward reference; no definition class Window { // Definition of WindowCounter not required static WindowCounter windowCounter; }; int main() { }