Build e Compilação em C++
Parte da seção Programação Orientada a Objetos do Journey de C++ da Coddy — lição 2 de 104.
O C++ é construído em três estágios: Pré-processamento, Compilação e Linkagem.
1. Pré-processamento — as diretivas #include são resolvidas, copiando o conteúdo dos cabeçalhos para os arquivos de origem
#include <iostream> // Cabeçalho do sistema
#include "my_file.h" // Seu próprio cabeçalho2. Compilação — Cada arquivo .cpp é compilado independentemente em um arquivo de objeto (.o)
// math_utils.cpp compila em math_utils.o
// main.cpp compila em main.o3. Linking — Arquivos de objeto são combinados no executável final
// math_utils.o + main.o → program.exeO arquivo de cabeçalho declara o que existe (protótipos). O arquivo .cpp fornece a implementação real. O linker conecta chamadas em main.cpp a implementações em outros arquivos .cpp.
Desafio
MédioO arquivo de cabeçalho math_utils.h declara duas funções. Implemente-as em math_utils.cpp:
doubleValue(int x)— retornax * 2square(int x)— retornax * x
Certifique-se de incluir o arquivo de cabeçalho em seu arquivo .cpp.
Folha de consulta
O C++ é construído em três estágios: Pré-processamento, Compilação e Linkagem.
Pré-processamento — as diretivas #include são resolvidas, copiando o conteúdo dos cabeçalhos para os arquivos de origem:
#include <iostream> // Cabeçalho do sistema
#include "my_file.h" // Seu próprio cabeçalhoCompilação — cada arquivo .cpp é compilado independentemente em um arquivo de objeto (.o):
// math_utils.cpp compila para math_utils.o
// main.cpp compila para main.oLinkagem — os arquivos de objeto são combinados no executável final:
// math_utils.o + main.o → program.exeO arquivo de cabeçalho declara o que existe (protótipos). O arquivo .cpp fornece a implementação real. O linker conecta as chamadas em main.cpp às implementações em outros arquivos .cpp.
Experimente você mesmo
#include <iostream>
#include "math_utils.h"
int main() {
int num;
std::cin >> num;
std::cout << "Double: " << doubleValue(num) << std::endl;
std::cout << "Square: " << square(num) << std::endl;
std::cout << "Build successful" << 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