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
- Classe Base (Superclasse): La classe de la qual es deriven altres classes.
- Classe Derivada (Subclasse): La classe que hereta d'una altra classe.
- Herència Simple: Una classe derivada hereta d'una sola classe base.
- Herència Múltiple: Una classe derivada hereta de més d'una classe base (no tractat en aquest tema).
- 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
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
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
- Defineix una classe base
Vehicle
amb un mètodemoure()
. - Defineix una classe derivada
Cotxe
que hereti deVehicle
i afegeixi un mètodetocarClaxon()
.
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
- Defineix una classe base
Persona
amb atributs públics, protegits i privats. - Defineix una classe derivada
Estudiant
que hereti dePersona
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.
Curs de Programació en C++
Mòdul 1: Introducció al C++
- Introducció al C++
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
- Entrada i Sortida
Mòdul 2: Estructures de Control
Mòdul 3: Funcions
- Introducció a les Funcions
- Paràmetres de Funció i Tipus de Retorn
- Sobrecàrrega de Funcions
- Recursivitat
Mòdul 4: Arrays i Strings
Mòdul 5: Punteres i Referències
- Introducció als Punteres
- Aritmètica de Punteres
- Punteres i Arrays
- Referències
- Assignació Dinàmica de Memòria
Mòdul 6: Programació Orientada a Objectes
- Introducció a la POO
- Classes i Objectes
- Constructors i Destructors
- Herència
- Polimorfisme
- Encapsulació i Abstracció
Mòdul 7: Temes Avançats
- Plantilles
- Gestió d'Excepcions
- Entrada/Sortida de Fitxers
- Biblioteca de Plantilles Estàndard (STL)
- Expressions Lambda
- Multifil