Usar Prototipos de Funciones en Archivos de Cabecera
En este paso, aprenderás sobre los prototipos de funciones y cómo usar archivos de cabecera para organizar y declarar funciones en C++. Los prototipos de funciones declaran el nombre de la función, el tipo de retorno y los parámetros sin proporcionar la implementación (el cuerpo de la función). Al usar archivos de cabecera, separas la interfaz de una función (su declaración) de su implementación. Esta separación mejora la organización del código, facilitando el mantenimiento y la reutilización de funciones en múltiples partes de tu programa o en múltiples programas.
Abre el WebIDE y crea tres archivos en el directorio ~/project:
Primero, crea math_functions.h:
touch ~/project/math_functions.h
Añade el siguiente código a math_functions.h:
#ifndef MATH_FUNCTIONS_H
#define MATH_FUNCTIONS_H
// Prototipos de funciones para operaciones 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
Los archivos .h se utilizan para declaraciones, que contienen prototipos de funciones y otras declaraciones pero no implementaciones. De esta manera, puedes declarar funciones sin implementarlas. Las directivas #ifndef, #define y #endif se llaman "include guards" (guardas de inclusión) y evitan inclusiones múltiples del archivo de cabecera, lo que puede causar errores.
A continuación, crea math_functions.cpp:
touch ~/project/math_functions.cpp
Añade el siguiente código a math_functions.cpp:
#include "math_functions.h"
// Implementaciones de funciones
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) {
// Comprobar división por cero
if (b == 0) {
return 0;
}
return a / b;
}
Este archivo .cpp contiene las implementaciones reales de las funciones que se declararon en el archivo de cabecera.
Finalmente, crea main.cpp:
touch ~/project/main.cpp
Añade el siguiente código a main.cpp:
#include <iostream>
#include "math_functions.h"
int main() {
// Demostrar llamadas a funciones del archivo de cabecera
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 archivo main.cpp incluye el archivo de cabecera math_functions.h, lo que hace que los prototipos de funciones estén disponibles. Luego puede utilizar las funciones implementadas en math_functions.cpp.
Compila el programa utilizando múltiples archivos fuente:
g++ math_functions.cpp main.cpp -o math_operations
./math_operations
Salida de ejemplo:
Addition: 10 + 5 = 15
Subtraction: 10 - 5 = 5
Multiplication: 10 * 5 = 50
Division: 10 / 5 = 2
Creemos otro ejemplo con un archivo de cabecera más complejo:
Crea calculator.h:
touch ~/project/calculator.h
Añade el siguiente código a calculator.h:
#ifndef CALCULATOR_H
#define CALCULATOR_H
class Calculator {
public:
// Prototipos de funciones para operaciones de 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 archivo de cabecera declara una clase llamada Calculator y sus métodos públicos.
Crea calculator.cpp:
touch ~/project/calculator.cpp
Añade el siguiente 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 proporciona las implementaciones de los métodos declarados en el archivo de cabecera calculator.h.
Crea calculator_main.cpp:
touch ~/project/calculator_main.cpp
Añade el siguiente 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 archivo principal utiliza la clase Calculator y realiza operaciones.
Compila el programa de la calculadora:
g++ calculator.cpp calculator_main.cpp -o calculator
./calculator
Salida de ejemplo:
Calculator Operations:
10 + 5 = 15
10 - 5 = 5
Puntos clave sobre prototipos de funciones y archivos de cabecera:
- Archivos de cabecera (.h) declaran prototipos de funciones, clases y otras declaraciones. Actúan como una interfaz, describiendo qué funciones están disponibles.
- Archivos fuente (.cpp) implementan las funciones reales declaradas en los archivos de cabecera. Contienen el código de cómo funcionan las funciones.
#ifndef, #define y #endif (guardas de inclusión) evitan inclusiones múltiples del mismo archivo de cabecera, lo que previene posibles errores de compilación.
- El uso de archivos de cabecera promueve la modularidad y la reutilización del código.
- Los archivos de cabecera te permiten separar el "qué" (declaraciones) del "cómo" (implementaciones).
- Facilitan la organización del código, haciéndolo más fácil de mantener y comprender.
Puedes pensar en los archivos de cabecera como el menú de un restaurante. El menú (cabecera) enumera lo que está disponible, mientras que la cocina (archivo fuente) prepara los platos reales.