El manejo de excepciones es una característica fundamental en C++ que permite a los programadores gestionar errores y condiciones excepcionales de manera controlada. En este módulo, aprenderemos cómo utilizar las excepciones para mejorar la robustez y la fiabilidad de nuestros programas.
Conceptos Clave
- Excepción: Un evento que ocurre durante la ejecución de un programa y que interrumpe el flujo normal de las instrucciones.
- Lanzar (throw): La acción de generar una excepción.
- Capturar (catch): La acción de manejar una excepción lanzada.
- Bloque try: Un bloque de código que contiene instrucciones que pueden lanzar excepciones.
- Bloque catch: Un bloque de código que maneja las excepciones lanzadas en el bloque try.
Estructura Básica del Manejo de Excepciones
La estructura básica para el manejo de excepciones en C++ incluye los bloques try, throw y catch. A continuación se muestra un ejemplo simple:
#include <iostream>
using namespace std;
int main() {
try {
// Bloque de código que puede lanzar una excepción
int divisor = 0;
if (divisor == 0) {
throw "División por cero no permitida";
}
int result = 10 / divisor;
cout << "Resultado: " << result << endl;
} catch (const char* e) {
// Bloque de código que maneja la excepción
cout << "Error: " << e << endl;
}
return 0;
}Explicación del Código
- Bloque try: Contiene el código que puede lanzar una excepción. En este caso, estamos verificando si el divisor es cero antes de realizar una división.
- throw: Si el divisor es cero, lanzamos una excepción con el mensaje "División por cero no permitida".
- Bloque catch: Captura la excepción lanzada y maneja el error imprimiendo un mensaje.
Tipos de Excepciones
En C++, se pueden lanzar y capturar diferentes tipos de excepciones, incluyendo tipos básicos como int, char, double, y tipos definidos por el usuario como clases y estructuras.
Ejemplo con Diferentes Tipos de Excepciones
#include <iostream>
using namespace std;
void checkNumber(int num) {
if (num < 0) {
throw num; // Lanza una excepción de tipo int
} else if (num == 0) {
throw "Número es cero"; // Lanza una excepción de tipo const char*
} else if (num > 100) {
throw 1.0; // Lanza una excepción de tipo double
}
}
int main() {
try {
checkNumber(150);
} catch (int e) {
cout << "Error: Número negativo " << e << endl;
} catch (const char* e) {
cout << "Error: " << e << endl;
} catch (double e) {
cout << "Error: Número mayor que 100" << endl;
}
return 0;
}Explicación del Código
- checkNumber: Función que lanza diferentes tipos de excepciones basadas en el valor del argumento
num. - Bloques catch: Capturan y manejan las excepciones de diferentes tipos (
int,const char*,double).
Ejercicio Práctico
Ejercicio 1: Manejo de Excepciones en una Calculadora
Escribe un programa que implemente una calculadora simple que maneje excepciones para las siguientes operaciones: suma, resta, multiplicación y división. El programa debe lanzar una excepción si se intenta dividir por cero.
Solución
#include <iostream>
using namespace std;
double calculate(double a, double b, char op) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
if (b == 0) {
throw "División por cero no permitida";
}
return a / b;
default:
throw "Operador no válido";
}
}
int main() {
double num1, num2;
char op;
cout << "Ingrese dos números y un operador (+, -, *, /): ";
cin >> num1 >> num2 >> op;
try {
double result = calculate(num1, num2, op);
cout << "Resultado: " << result << endl;
} catch (const char* e) {
cout << "Error: " << e << endl;
}
return 0;
}Explicación del Código
- calculate: Función que realiza la operación aritmética basada en el operador proporcionado. Lanza excepciones si se intenta dividir por cero o si se proporciona un operador no válido.
- Bloque try: Llama a la función
calculatey maneja cualquier excepción lanzada. - Bloque catch: Captura y maneja las excepciones lanzadas por la función
calculate.
Resumen
En esta sección, hemos aprendido los conceptos básicos del manejo de excepciones en C++, incluyendo cómo lanzar y capturar excepciones utilizando los bloques try, throw y catch. También hemos visto ejemplos prácticos y un ejercicio para reforzar los conceptos aprendidos. El manejo adecuado de excepciones es crucial para escribir programas robustos y fiables, y es una habilidad esencial para cualquier programador de C++.
Curso de Programación en C++
Módulo 1: Introducción a C++
- Introducción a C++
- Configuración del Entorno de Desarrollo
- Sintaxis y Estructura Básica
- Variables y Tipos de Datos
- Entrada y Salida
Módulo 2: Estructuras de Control
Módulo 3: Funciones
- Introducción a las Funciones
- Parámetros de Función y Tipos de Retorno
- Sobrecarga de Funciones
- Recursión
Módulo 4: Arreglos y Cadenas
- Introducción a los Arreglos
- Arreglos Multidimensionales
- Introducción a las Cadenas
- Manipulación de Cadenas
Módulo 5: Punteros y Referencias
- Introducción a los Punteros
- Aritmética de Punteros
- Punteros y Arreglos
- Referencias
- Asignación Dinámica de Memoria
Módulo 6: Programación Orientada a Objetos
- Introducción a la POO
- Clases y Objetos
- Constructores y Destructores
- Herencia
- Polimorfismo
- Encapsulación y Abstracción
Módulo 7: Temas Avanzados
- Plantillas
- Manejo de Excepciones
- Entrada/Salida de Archivos
- Biblioteca Estándar de Plantillas (STL)
- Expresiones Lambda
- Multihilo
