English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo articolo, imparerai tutto ciò che c'è da sapere sull'ereditarietà in C++. Più specificamente, cosa è l'ereditarietà e i diversi metodi di implementazione dell'ereditarietà tramite esempi.
L'ereditarietà è una delle principali funzionalità della programmazione orientata agli oggetti in C++. Permette agli utenti di creare una nuovaClasse(Sottoclasse).
Le sottoclasse inherits all the functions of the base class and can have its own other functions.
Supponiamo che tu abbia bisogno di tre ruoli nel gioco - unprofessore di matematica(Maths teacher),uncalciatore (Footballer)e unCommercianti(Businessman).
Poiché tutti i ruoli sono persone, possono camminare e parlare. Ma hanno anche abilità speciali. Il professore di matematica puòinsegnare matematica, i calciatori possonocalcio, i commercianti possonoGestire un'azienda.
Puoi creare tre classi separate che possono camminare, parlare e eseguire le loro abilità speciali, come illustrato di seguito.
In ogni classe, copierai lo stesso codice Walk (camminare) e Talk (parlare) per ogni ruolo.
Se si desidera aggiungere una nuova funzione - mangiare (mangiare), allora è necessario implementare lo stesso codice per ogni personaggio. Questo può facilmente causare errori (durante la copia) e codice duplicato.
Se possediamo unPersonClasse, che ha funzionalità di base come parlare, camminare, mangiare, dormire e aggiungere abilità speciali ai nostri ruoli, diventa facileottenere. Questo è stato completato utilizzando l'ereditarietà.
Utilizzando l'ereditarietà, non devi implementare lo stesso codice per ogni classe. Devi semplicementeEreditarietàEcco fatto.
Dunque, per i professori di matematica (sottoclasse), puoi ereditare tutte le funzionalità di Person (classe base) e aggiungere nuove funzionalitàTeachMaths(insegnare matematica)。Allo stesso modo, per i calciatori, si eredita tutte le funzioni di Person e si aggiungono nuove funzioniPlayFootball(giocare a calcio)e altri.
Questo rende il tuo codice più semplice, facile da comprendere e estendibile.
È importante ricordare che:Quando si utilizza l'ereditarietà, ogni classe derivata dovrebbe soddisfare i requisiti, indipendentemente dal fatto che sia una classe base o meno. Nell'esempio sopra, l'insegnante di matematica èuna persona, un calciatore èuna persona. Non puoi avere:L'impresario è l'azienda.
class Person { ... .. ... }; class MathsTeacher : public Person { ... .. ... }; class Footballer : public Person { .... .. ... };
Nell'esempio sopra, la classe Person è la classe base, mentre le classi MathsTeacher e Footballer sono derivate da Person.
Le classi derivate appaiono insieme alla dichiarazione della classe, seguite da due punti, la parola chiave public e il nome della classe base da cui deriva.
Poiché MathsTeacher e Footballer derivano da Person, è possibile accedere a tutti i dati e le funzioni dei membri di Person da loro.
Creare personaggi di gioco utilizzando il concetto di ereditarietà.
#include <iostream> using namespace std; class Person { public: string profession; int age; Person(): profession("disoccupato"), age(16) { } void display() { cout << "La mia professione è: " << profession << endl; cout << "La mia età è: " << age << endl; walk(); talk(); } void walk() { cout << "Io posso camminare." << endl; } void talk() { cout << "Io posso parlare" << endl; } }; // La classe MathsTeacher deriva dalla classe base Person. class MathsTeacher : public Person { public: void teachMaths() { cout << "Io insegno matematica." << endl; } }; // La classe Footballer deriva dalla classe base Person. class Footballer : public Person { public: void playFootball() { cout << "Io gioco a calcio." << endl; } }; int main() { MathsTeacher teacher; teacher.profession = "insegnante"; teacher.age = 23; teacher.display(); teacher.teachMaths(); Footballer footballer; footballer.profession = "atleta"; footballer.age = 19; footballer.display(); footballer.playFootball(); return 0; }
Risultato di output
La mia professione è: insegnante La mia età è: 23 Io posso camminare. Io posso parlare Io posso insegnare matematica. La mia professione è: atleta La mia età è: 19 Io posso camminare. Io posso parlare Io posso calcare a football.
In questo programma, Person è la classe base, mentre MathsTeacher e Footballer sono derivate dalla classe base Person.
La classe Person ha due membri di dati - professione e età. Ha anche due funzioni membri - walk() e talk().
Sia MathsTeacher che Footballer possono accedere a tutti i membri di dati e le funzioni di Person.
Ma MathsTeacher e Footballer hanno anche rispettivamente i loro owni membri funzione: teachMaths() e playFootball(). Queste funzioni possono essere accedute solo dalla propria classe.
Nel metodo main() viene creato un nuovo oggetto MathsTeacher teacher.
Poiché può accedere ai membri di dati di Person, può impostare la professione (professione) e l'età (età) di teacher. Utilizza la funzione display() definita nella classe Person per visualizzare questi dati. Allo stesso modo, la classe MathsTeacher definisce la funzione teachMaths().
Allo stesso modo, verrà creato un nuovo oggetto Footballer footballer. Può anche accedere ai membri di dati di Person e può chiamare la funzione display() per visualizzare. Poi solo il footballer (footballer) può accedere alla funzione playFootball().
Quando si creano classi derivate da una classe base, possono essere utilizzati diversi modificatori di accesso per ereditare i membri di dati della classe base.
Questi possono essere public, protected o private.
Nell'esempio sopra, la classe base Person è stata ereditata pubblicamente da MathsTeacher e football.
Scopri di piùEreditarietà pubblica, protetta e privata in C++Più informazioni.
Supponiamo che i membri delle funzioni della classe base e deriva abbiano lo stesso nome e parametri.
Se si crea un oggetto della classe deriva e si tenta di accedere a questa funzione membro, può essere chiamata solo la funzione membro della classe deriva.
I membri della funzione della classe deriva saranno sovrascritti dai membri della classe base.
Scopri di piùRiscrittura di funzione in C++Più informazioni.