Avatar ·

Por que são necessários arquivos de cabeçalho (.h) e arquivos de implementação (.cpp) em C++?

Olá a todos! Comecei a estudar C++ recentemente e não consigo entender por que existe essa separação entre header files e arquivos .cpp. Em Java ou Python, eu simplesmente escrevia todo o código em um único arquivo, e tudo funcionava. Aqui, é uma bagunça com #include, #pragma once e outras diretivas. Por exemplo, escrevo um programa simples: ```cpp // main.cpp #include void sayHello() { std::cout << "Hello!" << std::endl; } int main() { sayHello(); return 0; } ``` E isso funciona. Por que eu precisaria criar um sayHello.h e sayHello.cpp separados? Afinal, posso escrever tudo em um único arquivo. Ouvi dizer que isso é necessário para organizar o código e evitar erros de linking, mas não entendo exatamente como. O que me assusta especialmente é quando vejo que no arquivo .h escrevemos declarações de funções (protótipos), e no .cpp, a implementação. E se eu esquecer de adicionar algo, o compilador gera um erro. Por que não podemos armazenar tudo em um só lugar? Expliquem, por favor, com exemplos, por que essa separação é necessária e como usá-la corretamente.