Usar Protótipos de Função em Arquivos de Cabeçalho
Nesta etapa, você aprenderá sobre protótipos de função e como usar arquivos de cabeçalho para organizar e declarar funções em C++. Protótipos de função declaram o nome da função, o tipo de retorno e os parâmetros sem fornecer a implementação (o corpo da função). Ao usar arquivos de cabeçalho, você separa a interface de uma função (sua declaração) de sua implementação. Essa separação melhora a organização do código, tornando mais fácil manter e reutilizar funções em várias partes do seu programa ou em múltiplos programas.
Abra o WebIDE e crie três arquivos no diretório ~/project:
Primeiro, crie math_functions.h:
touch ~/project/math_functions.h
Adicione o seguinte código a math_functions.h:
#ifndef MATH_FUNCTIONS_H
#define MATH_FUNCTIONS_H
// Protótipos de função para operações matemáticas
int add(int a, int b);
int subtract(int a, int b);
int multiply(int a, int b);
double divide(double a, double b);
#endif // MATH_FUNCTIONS_H
Arquivos .h são usados para declarações, contendo protótipos de função e outras declarações, mas não implementações. Dessa forma, você pode declarar funções sem implementá-las. As diretivas #ifndef, #define e #endif são chamadas de include guards (guardas de inclusão), e elas previnem múltiplas inclusões do mesmo arquivo de cabeçalho, o que pode causar erros.
Em seguida, crie math_functions.cpp:
touch ~/project/math_functions.cpp
Adicione o seguinte código a math_functions.cpp:
#include "math_functions.h"
// Implementações das funções
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int multiply(int a, int b) {
return a * b;
}
double divide(double a, double b) {
// Verifica divisão por zero
if (b == 0) {
return 0;
}
return a / b;
}
Este arquivo .cpp contém as implementações reais das funções que foram declaradas no arquivo de cabeçalho.
Finalmente, crie main.cpp:
touch ~/project/main.cpp
Adicione o seguinte código a main.cpp:
#include <iostream>
#include "math_functions.h"
int main() {
// Demonstra chamadas de função do arquivo de cabeçalho
int x = 10, y = 5;
std::cout << "Addition: " << x << " + " << y << " = " << add(x, y) << std::endl;
std::cout << "Subtraction: " << x << " - " << y << " = " << subtract(x, y) << std::endl;
std::cout << "Multiplication: " << x << " * " << y << " = " << multiply(x, y) << std::endl;
std::cout << "Division: " << x << " / " << y << " = " << divide(x, y) << std::endl;
return 0;
}
Este arquivo main.cpp inclui o arquivo de cabeçalho math_functions.h, o que torna os protótipos de função disponíveis. Ele pode então usar as funções implementadas em math_functions.cpp.
Compile o programa usando múltiplos arquivos fonte:
g++ math_functions.cpp main.cpp -o math_operations
./math_operations
Exemplo de saída:
Addition: 10 + 5 = 15
Subtraction: 10 - 5 = 5
Multiplication: 10 * 5 = 50
Division: 10 / 5 = 2
Vamos criar outro exemplo com um arquivo de cabeçalho mais complexo:
Crie calculator.h:
touch ~/project/calculator.h
Adicione o seguinte código a calculator.h:
#ifndef CALCULATOR_H
#define CALCULATOR_H
class Calculator {
public:
// Protótipos de função para operações da calculadora
int add(int a, int b);
int subtract(int a, int b);
int calculate(int a, int b, char operation);
};
#endif // CALCULATOR_H
Este arquivo de cabeçalho declara uma classe chamada Calculator e seus métodos públicos.
Crie calculator.cpp:
touch ~/project/calculator.cpp
Adicione o seguinte código a calculator.cpp:
#include "calculator.h"
int Calculator::add(int a, int b) {
return a + b;
}
int Calculator::subtract(int a, int b) {
return a - b;
}
int Calculator::calculate(int a, int b, char operation) {
switch (operation) {
case '+': return add(a, b);
case '-': return subtract(a, b);
default: return 0;
}
}
Este calculator.cpp fornece as implementações para os métodos declarados no arquivo de cabeçalho calculator.h.
Crie calculator_main.cpp:
touch ~/project/calculator_main.cpp
Adicione o seguinte código a calculator_main.cpp:
#include <iostream>
#include "calculator.h"
int main() {
Calculator calc;
std::cout << "Calculator Operations:" << std::endl;
std::cout << "10 + 5 = " << calc.calculate(10, 5, '+') << std::endl;
std::cout << "10 - 5 = " << calc.calculate(10, 5, '-') << std::endl;
return 0;
}
Este arquivo principal usa a classe Calculator e realiza operações.
Compile o programa da calculadora:
g++ calculator.cpp calculator_main.cpp -o calculator
./calculator
Exemplo de saída:
Calculator Operations:
10 + 5 = 15
10 - 5 = 5
Pontos chave sobre protótipos de função e arquivos de cabeçalho:
- Arquivos de cabeçalho (.h) declaram protótipos de função, classes e outras declarações. Eles agem como uma interface, descrevendo quais funções estão disponíveis.
- Arquivos fonte (.cpp) implementam as funções reais declaradas nos arquivos de cabeçalho. Eles contêm o código de como as funções funcionam.
#ifndef, #define e #endif (include guards) previnem inclusões múltiplas do mesmo arquivo de cabeçalho, o que evita potenciais erros de compilação.
- O uso de arquivos de cabeçalho promove modularidade e reutilização de código.
- Arquivos de cabeçalho permitem separar o "o quê" (declarações) do "como" (implementações).
- Eles facilitam a organização do código, tornando-o mais fácil de manter e entender.
Você pode pensar em arquivos de cabeçalho como o menu de um restaurante. O menu (cabeçalho) lista o que está disponível, enquanto a cozinha (arquivo fonte) prepara os pratos reais.