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
Vehicleamb un mètodemoure(). - Defineix una classe derivada
Cotxeque hereti deVehiclei 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
Personaamb atributs públics, protegits i privats. - Defineix una classe derivada
Estudiantque hereti dePersonai 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
