La herencia y el polimorfismo son conceptos clave en la programación orientada a objetos (POO) que permiten la reutilización y extensión eficiente del código. Vamos a explorar estos conceptos en C++.
Herencia en C++
La herencia es un mecanismo en el que una clase adquiere las propiedades (datos miembro y funciones miembro) de otra clase. La clase que hereda se conoce como "clase derivada", y la clase de la que hereda se llama "clase base".
Declaración de una Clase Derivada
class ClaseBase {
public:
int dato_base;
};
class ClaseDerivada : public ClaseBase {
public:
int dato_derivado;
};
En este ejemplo, `ClaseDerivada` hereda de `ClaseBase` utilizando la palabra clave `public`.
Acceso a Miembros Heredados
Los miembros heredados de la clase base se pueden acceder directamente desde la clase derivada.
ClaseDerivada objeto;
objeto.dato_base = 10;
Polimorfismo en C++
El polimorfismo permite que un objeto se comporte de diferentes maneras en función del contexto. Esto se logra a través de funciones virtuales y punteros a clases base.
Funciones Virtuales
Una función virtual es una función declarada en una clase base que puede ser redefinida en una clase derivada.
class ClaseBase {
public:
virtual void mostrar() {
std::cout << "Clase Base" << std::endl;
}
};
class ClaseDerivada : public ClaseBase {
public:
void mostrar() override {
std::cout << "Clase Derivada" << std::endl;
}
};
Uso de Punteros a Clases Base
int main() {
ClaseBase* objeto_base = new ClaseBase();
ClaseBase* objeto_derivado = new ClaseDerivada();
objeto_base->mostrar(); // Llama a la función mostrar de ClaseBase
objeto_derivado->mostrar(); // Llama a la función mostrar de ClaseDerivada
delete objeto_base;
delete objeto_derivado;
return 0;
}
En este ejemplo, se crea un objeto de la clase base y otro de la clase derivada. Se llama a la función `mostrar` a través de punteros a clases base, logrando así polimorfismo.
Estos conceptos de herencia y polimorfismo son fundamentales para una programación orientada a objetos eficaz en C++. Te permiten escribir código más limpio, extensible y fácil de mantener.