8.9 – Código de classe e arquivos de cabeçalho Aprenda o melhor novato C ++ Bitcoin Portfolio

No entanto, à medida que as turmas se tornam mais longas e mais complicadas, pode ser mais difícil gerenciar e usar a turma se todas as definições de funções-membro existirem na sala de aula. Usar uma aula já escrita requer apenas a compreensão de suas funções de membro público, não como a classe trabalha sob o capô. Os detalhes de implementação da função de membro apenas dificultam.

Felizmente, o C ++ fornece uma maneira de separar a parte de declaração da classe da parte de implementação. Isso é feito definindo funções de membro de classe fora da definição de classe. Para fazer isso, simplesmente defina as funções de membro da classe como se fossem funções normais, mas forneça à função o nome da classe com o operador de resolução do escopo (: 🙂 (como um namespace)).


Esta é a nossa classe Date com o construtor Date e a função setDate (), que é definida fora da classe definição de classe. Observe que os protótipos dessas funções ainda existem na definição de classe, mas a implementação real foi movida para fora:

Tipos (que também incluem classes) são excluídos da parte da regra de definição única que diz que você só pode ter uma definição por programa. Portanto, não há problema # incluindo definições de classes em vários arquivos de código (se esse fosse o caso, as classes não seriam muito úteis).

Isso depende. As funções de membro definidas na definição de classe são implicitamente consideradas online. As funções online são excluídas da definição do programa da regra de uma definição. Isso significa que não há problema em definir funções-membro triviais (como funções de acesso) na própria definição da classe.

Funções de membro fora do definição de classe são tratados como funções normais e estão sujeitos à definição exclusiva da parte do programa da regra de definição única. Portanto, essas funções devem ser definidas em um arquivo de código, não no cabeçalho. A única exceção a essa regra são as funções do modelo, que discutiremos em um capítulo futuro.

Você pode ser tentado a escrever todas as suas definições de função de membro para o arquivo de cabeçalho dentro da classe. Embora isso seja compilado, há algumas desvantagens em fazer isso. Acima de tudo, como mencionado acima, isso obstrui sua definição de classe. Em segundo lugar, as funções definidas na classe estão implicitamente on-line. Para os recursos maiores que são chamados de vários locais, isso pode aumentar seu código. Em terceiro lugar, se você alterar alguma coisa no código no cabeçalho, deverá recompilar quaisquer arquivos que contenham esse cabeçalho. Isso pode ter um efeito cascata, com uma pequena alteração, causando a necessidade de recompilar todo o programa (que pode ser lento). Se você alterar o código em um arquivo CPP, somente esse arquivo CPP precisará ser recompilado!

Em lições futuras, a maioria de nossas classes será definida no arquivo .cpp, com todas as funções implementadas diretamente na definição da classe. É apenas por conveniência e para manter os exemplos curtos. Em projetos reais, é muito mais comum que as classes sejam armazenadas em seus próprios códigos e arquivos de cabeçalho, e você deve se acostumar com elas.

separado definição de classe e a implementação de classes é muito comum para bibliotecas que você pode usar para estender seu programa. Nos seus programas, você tem # cabeçalhos pertencentes à biblioteca padrão, como: Iostream, string, vetor, array, etc. Note que você não precisa adicionar iostream.cpp, string.cpp, vector.cpp ou array.cpp em seus projetos. Seu programa precisa de instruções de Arquivos de cabeçalho Para validar o compilador, escreva programas sintaticamente corretos. No entanto, implementações para classes que pertencem à biblioteca C ++ padrão estão contidas em um arquivo pré-compilado associado à etapa de associação. Você nunca vê o código.

Além de alguns softwares de código aberto (nos quais os arquivos .h e .cpp são fornecidos), a maioria das bibliotecas de terceiros só oferece Arquivos de cabeçalho, com um arquivo de biblioteca pré-compilado. Existem várias razões para isso: 1) É mais rápido recompilar uma biblioteca pré-compilada do que recompilá-la se necessário; 2) uma biblioteca pré-compilada pode ser redistribuída uma vez, enquanto o código compilado compila todos os executáveis ​​que a utilizam; Tamanhos) e 3) motivos de propriedade intelectual (você não quer que as pessoas roubem seu código).

Possui arquivos separados em declaração (cabeçalho) e implementação (arquivo de códigoAlém de ser uma boa forma, também facilita a criação de suas próprias bibliotecas personalizadas. Criar suas próprias bibliotecas está além do escopo desses tutoriais, mas é importante separar sua instrução e sua implementação. 8.10 – objetos de classe const e funções de membro