10. Herencia y polimorfismo
Herencia
Una clase derivada extiende una base, reutilizando y especializando comportamiento.
1#include <iostream>
2
3class Animal {
4public:
5 virtual void sonido() const {
6 std::cout << "...\n";
7 }
8 virtual ~Animal() = default;
9};
10
11class Perro : public Animal {
12public:
13 void sonido() const override {
14 std::cout << "Guau\n";
15 }
16};
Polimorfismo
Con virtual en la base, una referencia o puntero a Animal puede llamar a la versión correcta de sonido() según el objeto real (Perro, etc.).
1#include <iostream>
2
3
4void escuchar(const Animal& a) {
5 a.sonido();
6}
7
8int main() {
9 Perro p;
10 escuchar(p);
11 return 0;
12}
Destructor virtual
Si borras objetos a través de puntero a base, el destructor de la base debe ser virtual para que se destruya bien la parte derivada.
Ejercicio
Modelá Figura con area() virtual y dos clases Circulo y Cuadrado que la implementen.