La herència és un dels pilars fonamentals de la Programació Orientada a Objectes (POO). Permet crear noves classes (classes derivades) a partir de classes existents (classes base), heretant els atributs i mètodes de la classe base. Això facilita la reutilització del codi i la creació de jerarquies de classes més organitzades i mantenibles.

Conceptes Clau

  1. Classe Base (Superclasse): La classe de la qual es deriven altres classes.
  2. Classe Derivada (Subclasse): La classe que hereta d'una altra classe.
  3. Herència Simple: Una classe derivada hereta d'una sola classe base.
  4. Herència Múltiple: Una classe derivada hereta de més d'una classe base (no tractat en aquest tema).
  5. Visibilitat: Controla l'accés als membres de la classe base des de la classe derivada (public, protected, private).

Sintaxi Bàsica

class ClasseBase {
public:
    int atributBase;
    void metodeBase() {
        // Codi del mètode
    }
};

class ClasseDerivada : public ClasseBase {
public:
    int atributDerivat;
    void metodeDerivat() {
        // Codi del mètode
    }
};

Exemple Pràctic

Definició de la Classe Base

#include <iostream>
using namespace std;

class Animal {
public:
    void menjar() {
        cout << "L'animal està menjant." << endl;
    }
};

Definició de la Classe Derivada

class Gos : public Animal {
public:
    void lladrar() {
        cout << "El gos està lladrant." << endl;
    }
};

Utilització de les Classes

int main() {
    Gos meuGos;
    meuGos.menjar();  // Mètode heretat de la classe base
    meuGos.lladrar(); // Mètode de la classe derivada
    return 0;
}

Sortida Esperada

L'animal està menjant.
El gos està lladrant.

Visibilitat

La visibilitat dels membres de la classe base en la classe derivada depèn del mode d'herència utilitzat:

  • public: Els membres públics i protegits de la classe base esdevenen públics i protegits en la classe derivada.
  • protected: Els membres públics i protegits de la classe base esdevenen protegits en la classe derivada.
  • private: Els membres públics i protegits de la classe base esdevenen privats en la classe derivada.

Exemple de Visibilitat

class ClasseBase {
public:
    int publicAtribut;
protected:
    int protectedAtribut;
private:
    int privateAtribut;
};

class ClasseDerivada : public ClasseBase {
public:
    void mostrar() {
        cout << "Public Atribut: " << publicAtribut << endl; // Accessible
        cout << "Protected Atribut: " << protectedAtribut << endl; // Accessible
        // cout << "Private Atribut: " << privateAtribut << endl; // No accessible
    }
};

Exercicis Pràctics

Exercici 1: Crear una Jerarquia de Classes

  1. Defineix una classe base Vehicle amb un mètode moure().
  2. Defineix una classe derivada Cotxe que hereti de Vehicle i afegeixi un mètode tocarClaxon().

Solució

#include <iostream>
using namespace std;

class Vehicle {
public:
    void moure() {
        cout << "El vehicle es mou." << endl;
    }
};

class Cotxe : public Vehicle {
public:
    void tocarClaxon() {
        cout << "El cotxe toca el claxon." << endl;
    }
};

int main() {
    Cotxe meuCotxe;
    meuCotxe.moure();       // Mètode heretat de la classe base
    meuCotxe.tocarClaxon(); // Mètode de la classe derivada
    return 0;
}

Exercici 2: Herència i Visibilitat

  1. Defineix una classe base Persona amb atributs públics, protegits i privats.
  2. Defineix una classe derivada Estudiant que hereti de Persona i mostri els atributs accessibles.

Solució

#include <iostream>
using namespace std;

class Persona {
public:
    string nom;
protected:
    int edat;
private:
    string DNI;
};

class Estudiant : public Persona {
public:
    void mostrar() {
        cout << "Nom: " << nom << endl;       // Accessible
        cout << "Edat: " << edat << endl;     // Accessible
        // cout << "DNI: " << DNI << endl;    // No accessible
    }
};

int main() {
    Estudiant estudiant;
    estudiant.nom = "Joan";
    estudiant.mostrar();
    return 0;
}

Resum

En aquesta secció, hem après els conceptes bàsics de la herència en C++, incloent la sintaxi bàsica, la visibilitat dels membres heretats i com utilitzar la herència per crear jerarquies de classes. També hem vist exemples pràctics i exercicis per reforçar els conceptes apresos. La herència és una eina poderosa que permet la reutilització del codi i la creació de sistemes més organitzats i mantenibles.

© Copyright 2024. Tots els drets reservats