Clases y Objetos en C++: Guía Práctica de Programación Orientada a Objetos
Clases y Objetos en C++
Descubre cómo encapsular datos y comportamiento en C++ usando clases y objetos, con ejemplos claros y mejores prácticas.
¿Por Qué Usar Clases?
En lecciones anteriores exploramos funciones y variables. A medida que los proyectos crecen, agrupar datos y operaciones relacionados se vuelve esencial para la mantenibilidad y claridad. Una clase te permite agrupar miembros de datos y funciones miembro en una sola unidad lógica, habilitando la programación orientada a objetos (POO) —la base del diseño moderno en C++.
Ilustración: Una Habitación
Considera una habitación rectangular. Necesitas almacenar su longitud, anchura y altura mientras también calculas su área y volumen. Con una clase, puedes mantener estos fuertemente acoplados:
class Habitación { public: double longitud; double anchura; double altura; double calcularArea() { return longitud * anchura; } double calcularVolumen() { return longitud * anchura * altura; } };
Definiendo una Clase
Una clase se define con la palabra clave class, seguida de su nombre y un cuerpo encerrado entre llaves, terminando con punto y coma:
class NombreClase { // miembros de datos // funciones miembro };
En el ejemplo anterior, Habitación es un modelo. Las variables dentro se llaman miembros de datos; las funciones son funciones miembro.
Creando Objetos
Definir una clase solo especifica el diseño; no asigna memoria. Los objetos son instancias concretas creadas a partir de ese modelo:
Habitación habitación1; // objeto único Habitación habitación2, habitación3; // múltiples objetos en una declaración
Los objetos pueden instanciarse en cualquier lugar —dentro de funciones, otras clases o globalmente— siempre que se respete su ámbito.
Accediendo a Miembros
Usa el operador punto (.) para llamar a funciones miembro o acceder a miembros de datos:
habitación1.longitud = 5.5; double area = habitación1.calcularArea();
Ejemplo 1: Calculando Métricas de Habitación
#include <iostream> using namespace std; class Habitación { public: double longitud; double anchura; double altura; double calcularArea() { return longitud * anchura; } double calcularVolumen() { return longitud * anchura * altura; } }; int main() { Habitación habitación1; habitación1.longitud = 42.5; habitación1.anchura = 30.8; habitación1.altura = 19.2; cout << "Área de Habitación = " << habitación1.calcularArea() << endl; cout << "Volumen de Habitación = " << habitación1.calcularVolumen() << endl; return 0; }
Salida
Área de Habitación = 1309 Volumen de Habitación = 25132.8
Encapsulamiento: Public vs Private
El encapsulamiento protege los datos controlando el acceso. Los miembros declarados como private están ocultos del mundo exterior y solo pueden accederse a través de funciones miembro públicas.
class Prueba { private: int a; void función1() {} public: int b; void función2() {} };
En el siguiente ejemplo, los miembros de datos son privados y se inicializan a través de un método público:
#include <iostream> using namespace std; class Habitación { private: double longitud; double anchura; double altura; public: void inicializarDatos(double len, double anch, double alt) { longitud = len; anchura = anch; altura = alt; } double calcularArea() { return longitud * anchura; } double calcularVolumen() { return longitud * anchura * altura; } }; int main() { Habitación habitación1; habitación1.inicializarDatos(42.5, 30.8, 19.2); cout << "Área de Habitación = " << habitación1.calcularArea() << endl; cout << "Volumen de Habitación = " << habitación1.calcularVolumen() << endl; return 0; }
Salida
Área de Habitación = 1309 Volumen de Habitación = 25132.8
Lecturas Adicionales
Para directrices autoritativas, consulta el estándar ISO/IEC 14882:2023 de C++ o recursos confiables como cplusplus.com y cppreference.com.
Lenguaje C
- Estructuras vs Clases en C++: Guía práctica para desarrolladores embebidos
- Clases y objetos en C#: Fundamentos para POO robusta
- Dominando clases y métodos abstractos en C#: Guía práctica
- Entendiendo clases y métodos parciales en C#
- Dominando clases y métodos sealed en C#: Cuándo usarlos, ejemplos claros y mejora de seguridad y rendimiento
- Funciones y clases amigas en C++: dominando el control de acceso
- Dominando las plantillas de clase en C++: guía práctica
- Struct vs Class en C++: Diferencias Clave, Sintaxis y Mejores Casos de Uso
- Entendiendo las Clases de Almacenamiento en C++: Alcance, Vida y Uso
- Guía Completa de Fecha y Hora en C++
- Clases y Objetos en Java: Guía Práctica