Arquivos Header e Source
Parte da seção Programação Orientada a Objetos do Journey de C++ da Coddy — lição 3 de 104.
Em C++, o código é dividido em arquivos de cabeçalho (.h) para declarações e arquivos de origem (.cpp) para implementações.
Arquivo de cabeçalho com guards de cabeçalho (helpers.h)
#ifndef HELPERS_H
#define HELPERS_H
#include <string>
std::string greet(std::string name);
int addNumbers(int a, int b);
#endifArquivo de origem com implementações (helpers.cpp)
#include "helpers.h"
std::string greet(std::string name) {
return "Hello, " + name + "!";
}
int addNumbers(int a, int b) {
return a + b;
}Usando-os no main
#include <iostream>
#include "helpers.h"
int main() {
std::cout << greet("Alice") << std::endl;
std::cout << addNumbers(5, 3) << std::endl;
return 0;
}Saída:
Hello, Alice!
8Header guards (#ifndef, #define, #endif) evitam que um cabeçalho seja incluído múltiplas vezes. O arquivo .h declara o que existe (protótipos), o arquivo .cpp define como funciona (implementações).
Desafio
MédioCrie três funções auxiliares divididas entre um arquivo de cabeçalho e um arquivo de origem:
helpers.h— Declarações de função com guards de cabeçalhohelpers.cpp— Implementações de função
Funções para criar:
greet(name)— retorna"Hello, <name>!"ageInTenYears(age)— retornaage + 10checkAdult(name, age)— retorna"<name> is an adult"se age >= 18, caso contrário"<name> is a minor"
Folha de consulta
O código C++ é organizado em arquivos de cabeçalho (.h) para declarações e arquivos de origem (.cpp) para implementações.
Header guards evitam inclusões múltiplas:
#ifndef HELPERS_H
#define HELPERS_H
// declarações aqui
#endifArquivo de cabeçalho (helpers.h) contém declarações de funções:
#ifndef HELPERS_H
#define HELPERS_H
#include <string>
std::string greet(std::string name);
int addNumbers(int a, int b);
#endifArquivo de origem (helpers.cpp) contém implementações:
#include "helpers.h"
std::string greet(std::string name) {
return "Hello, " + name + "!";
}
int addNumbers(int a, int b) {
return a + b;
}Usando as funções no main:
#include <iostream>
#include "helpers.h"
int main() {
std::cout << greet("Alice") << std::endl;
std::cout << addNumbers(5, 3) << std::endl;
return 0;
}Experimente você mesmo
#include <iostream>
#include "helpers.h"
int main() {
std::string name;
int age;
std::getline(std::cin, name);
std::cin >> age;
std::cout << greet(name) << std::endl;
std::cout << "In 10 years you will be " << ageInTenYears(age) << std::endl;
std::cout << checkAdult(name, age) << std::endl;
return 0;
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Fundamentos de OOP
Arquivos ExternosBuild e Compilação em C++Arquivos Header e SourceNamespaces e EscopoIntrodução a OOP em C++Classes vs ObjetosO Ponteiro 'this'Métodos (Funções Membro)Atributos (Membros de Dados)Básico de Ctors e DtorsRecapitulação - Calculadora Simples4Propriedades de Classe
Membros de Instância vs EstáticosGetters e SettersFunções de Membro ConstPalavra-chave MutableMétodos e Variáveis EstáticosFunções e Classes FriendRecapitulação - Gerenciador de Conta Bancária7Herança
Herança BásicaNíveis de Acesso na HerançaOrdem de Chamada de Ctor e DtorSobrescrita de MétodosFunções Virtuais e VTableHerança MúltiplaHerança VirtualRecapitulação - Hierarquia de Funcionários2Gerenciamento de Memória
Memória Stack vs HeapPonteiros e ReferênciasMemória Dinâmica (new/delete)Smart Pointers em C++RAII em C++Recapitulação - Gerenciador de Array Dinâmico5Encapsulamento
Especificadores de Acesso em C++Especificadores de Acesso em DetalhesOcultação de InformaçãoStruct vs ClassClasses Aninhadas e InternasRecapitulação - Sistema de Registros de Alunos8Polimorfismo
Polimorfismo de Compilação vs Tempo de ExecuçãoSobrecarga de FunçõesFunções Virtuais RevisitadasFunções Virtuais PurasClasses AbstratasDesign de Interfaces em C++Dynamic Casting e RTTIRecapitulação - Calculadora de Formas3Construtores e Destrutores
Construtor PadrãoConstrutor ParametrizadoConstrutor de CópiaConstrutor de MovimentaçãoListas de Inicialização do ConstrutorConstrutores DelegadosMergulho Profundo em DestrutoresRegra dos Três / Cinco / ZeroRecapitulação - Classe String6Sobrecarga de Operadores
Introdução à Sobrecarga de OperadoresSobrecarga de Operadores AritméticosSobrecarga de Operadores de ComparaçãoOperadores de StreamSobrecarga do Operador de AtribuiçãoSobrecarga dos Operadores [] e ()Operadores de Conversão de TipoRecapitulação - Classe Matrix9Templates
Templates de FunçãoTemplates de ClasseEspecialização de TemplatesTemplates VariádicosFundamentos de SFINAE e Type TraitsRecapitulação - Container Genérico