Lavorare con l'ereditarietà in C++

In questo tutorial parleremo di ereditarietà in C++, un argomento molto interessante, vediamolo attraverso un semplice esempio. Per le persone che sono su Windows, puoi scaricare un IDE per programmare, ti aiuterà a compilare ed eseguire i programmi, lasciamo il link qui sotto:

DEVC++

Qui useremo Linux, in particolare Ubuntu, che ha già un compilatore per C++. Il linguaggio C++, come probabilmente tutti sanno, permette l'ereditarietà multipla, a differenza di Java, che permette solo l'ereditarietà semplice e se vogliamo qualcosa di simile dobbiamo tirare le interfacce, alla fine è meno soggetto ad errori.

L'esempio principale che mostreremo qui per vedere l'ereditarietà in C ++ è semplice, non entreremo nell'ereditarietà multipla, tranne che alla fine per mostrare un errore con cui possiamo essere colpiti.

1. Ereditarietà semplice in C++


Per iniziare il primo esempio, ereditarietà semplice, avremo una classe Animale, che sarà la nostra classe base o genitore, e 2 classi che erediteranno, Cane che non avrà alcun codice e Gatto che aggiungerà un nuovo parametro alla classe genitore. Vediamo il codice (è breve):
 #include utilizzando lo spazio dei nomi std; class Animal {privato: int age; pubblico: Animale (int a = 1) {età = a; }; int getAge() const {return age;} void setAge (int a = 9) {age = a; }}; class Cane: public Animal {}; classe Gatto: pubblico Animale {privato: galleggiante peso; public: Cat (int a = 2, float w = 3.2): Animal (a) {weight = w; } float getWeight() const {restituisce peso;}}; int main () {Cane mastin; cout << "____DOG____" << endl; cout << "Prima:" << mastin.getAge () << endl; mastin.setEtà (2); cout << "Dopo:" << mastin.getAge () << endl; Miao di gatto (3, 4.1); cout << "____CAT____" << endl; cout << meow.getAge () << "" << meow.getWeight () << endl; } 
Partiamo dal presupposto che tu conosca già un po' di C++ per andare avanti a vedere problemi di ereditarietà, e quindi le parti di funzioni o parti pubbliche e private che non andremo a spiegare. Per ereditare da una classe abbiamo la seguente sintassi:
 class class_figlia: public parent_class
Quindi nel nostro esempio per creare la classe Cane abbiamo usato:
 classe Cane: animale pubblico
Indica che Cane eredita da Animal, tutto ciò che la classe Animal ha nei suoi blocchi pubblici o protetti possiamo usarlo, tuttavia se usiamo il blocco privato otterremo un errore. Buona classe Cane è vuoto, quindi non ha grosse difficoltà.

Se andiamo a lezione Gatto, abbiamo la stessa dichiarazione di classe di prima, a parte questo vediamo che aggiunge una nuova variabile peso, questa variabile non ce l'ha né la classe Animale, nessuno dei due Cane. Qui nel costruttore della classe abbiamo chiamato il costruttore della classe genitore, quindi passiamo i dati per la variabile età, e riempiamo anche la variabile peso.

NotaPuoi vedere che i parametri che passiamo alle funzioni possono avere un valore predefinito.

Nel principale creiamo un oggetto della classe Cane, lasciamo l'età per impostazione predefinita e la mostriamo, quindi usiamo la funzione setAge per cambiare l'età e mostrarla di nuovo. Infine creiamo un oggetto della classe Gatto, e questa volta non lasciamo che le variabili abbiano un valore predefinito e le passiamo a loro durante la creazione dell'oggetto, e per non variare le mostriamo.

Se vogliamo esegui questo codice in un terminale linux con g ++, facciamo quanto segue:

 g++ -o test tesc.gcc
E per eseguirlo molto facilmente:
 ./test
Mostreremo una cattura con la compilazione e l'esecuzione del piccolo codice:

2. Eredità multipla in C++


Vederli pericoli dell'ereditarietà multipla lasceremo un codice molto piccolo:
 #include utilizzando lo spazio dei nomi std; class Animal {public: void walk() {cout << "Walking in Animal" << endl; }}; class Mammal {public: void walk() {cout << "Walking in Mammal" << endl; }}; class Cane: animale pubblico, mammifero pubblico {}; int main () {Cane cane; dog.walk (); } 
Lo vediamo Cane eredita da Animale Mammifero, ed entrambe le classi hanno la stessa funzione camminare, se utilizzo la funzione normale come nel codice:
 dog.walk ()
E compiliamo otteniamo il seguente errore:

Per risolverlo possiamo usare la seguente sintassi, per chiamare la funzione Animale:

 cane.Animale :: passeggiata ();
o per usare la classe Mammifero:
 cane.Mamifero :: passeggiata ();
E ovviamente la soluzione migliore è non avere 2 funzioni con lo stesso nome se useremo l'ereditarietà multipla, in questo programma è molto facile risolverlo, ma in uno grande può diventare un mal di testa.

Ti è piaciuto e hai aiutato questo Tutorial?Puoi premiare l'autore premendo questo pulsante per dargli un punto positivo

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave