In deze tutorial gaan we het hebben over overerving in C ++, een zeer interessant onderwerp, laten we het bekijken aan de hand van een eenvoudig voorbeeld. Voor mensen die Windows gebruiken, kunt u een IDE downloaden om te programmeren, het zal u helpen bij het compileren en uitvoeren van de programma's, we laten de onderstaande link achter:
DEVC ++
Hier gaan we Linux gebruiken, met name Ubuntu, dat al een compiler voor C++ heeft. De C++-taal, zoals iedereen waarschijnlijk weet, staat meervoudige overerving toe, in tegenstelling tot Java, dat alleen eenvoudige overerving toestaat en als we iets soortgelijks willen, moeten we interfaces trekken, uiteindelijk is het minder vatbaar voor fouten.
Het belangrijkste voorbeeld dat we hier gaan laten zien om overerving in C ++ te zien, is eenvoudig, we gaan niet in op meervoudige overerving, behalve aan het einde om een fout te tonen waarmee we kunnen worden beïnvloed.
1. Eenvoudige overerving in C ++
Om met het eerste voorbeeld te beginnen, eenvoudige overerving, hebben we een klasse Dier, wat onze basisklasse of ouder zal zijn, en 2 klassen die zullen erven, Hond die geen code zal hebben en Kat die een nieuwe parameter aan de bovenliggende klasse zal toevoegen. Laten we de code eens bekijken (het is kort):
#include met namespace std; klasse Dier {privé: int leeftijd; publiek: Dier (int a = 1) {leeftijd = a; }; int getAge () const {return age;} void setAge (int a = 9) {age = a; }}; klasse Hond: openbaar dier {}; klasse Kat: openbaar Dier {privé: drijfgewicht; publiek: Kat (int a = 2, float w = 3.2): Dier (a) {gewicht = w; } float getWeight () const {retourgewicht;}}; int main () {Hond mastin; cout << "____DOG____" << endl; cout << "Voor:" << mastin.getAge () << endl; mastin.setLeeftijd (2); cout << "Na:" << mastin.getAge () << endl; Kattenmiauw (3, 4.1); cout << "____CAT____" << endl; cout << meow.getAge () << "" << meow.getWeight () << endl; }We gaan ervan uit dat je al wat C ++ kent om verder te gaan met overervingsproblemen, en daarom gaan we de delen van functies of openbare en privé-delen niet uitleggen. Om van een klasse te erven, hebben we de volgende syntaxis:
klasse dochter_klasse: openbare ouder_klasseDus in ons voorbeeld om de klasse te maken Hond we hebben gebruikt:
klasse Hond: openbaar dierGeeft aan dat Hond erft van Animal, alles wat de klasse Animal in zijn openbare of beschermde blokken heeft, kunnen we gebruiken, maar als we het privéblok gebruiken, krijgen we een foutmelding. Goede klas Hond het is leeg, dus het heeft geen grote problemen.
Als we naar de les gaan Kat, we hebben dezelfde klassedeclaratie als voorheen, behalve dat we zien dat het een nieuwe variabele toevoegt gewicht, deze variabele heeft het noch de klasse Dier, geen van beide Hond. Hier in de constructor van de klasse hebben we de constructor van de bovenliggende klasse genoemd, dus we geven de gegevens door voor de variabele leeftijd, en we vullen ook de variabele in gewicht.
OpmerkingU kunt zien dat de parameters die we doorgeven aan de functies een standaardwaarde kunnen hebben.
In de voornaamst we maken een object van de klasse Hond, laten we de leeftijd standaard staan en laten we deze zien, dan gebruiken we de functie setLeeftijd om de leeftijd te wijzigen en opnieuw te tonen. Ten slotte maken we een object van de klasse Kat, en deze keer laten we de variabelen geen standaardwaarde hebben en geven we ze door bij het maken van het object, en om niet te variëren laten we ze zien.
Als we willen voer deze code uit in een linux-terminal met g ++, doen we het volgende:
g ++ -o test tesc.gccEn om het heel gemakkelijk uit te voeren:
./toetsWe gaan een opname laten zien met de compilatie en uitvoering van de kleine code:
2. Meervoudige overerving in C ++
Om ze te zien gevaren van meervoudige overerving we gaan een heel kleine code achterlaten:
#include met namespace std; class Animal {public: void walk () {cout << "Walking in Animal" << endl; }}; klasse Zoogdier {publiek: void walk () {cout << "Walking in Mammal" << endl; }}; klasse Hond: openbaar dier, openbaar zoogdier {}; int main () {Hond hond; hondenuitlaat (); }We zien dat Hond erft van Dier Y Zoogdier, en beide klassen hebben dezelfde functie lopen, als ik gebruik maak van de normale functie zoals in de code:
hondenuitlaat ()En we compileren we krijgen de volgende foutmelding:
Om het op te lossen kunnen we de volgende syntaxis gebruiken om de functie aan te roepen: Dier:
hond.Dier :: lopen ();of om de klas te gebruiken Zoogdier:
hond.Mamifero :: lopen ();En natuurlijk is de beste oplossing om geen 2 functies met dezelfde naam te hebben als we gebruik gaan maken van meervoudige overerving, in dit programma is het heel gemakkelijk op te lossen, maar in een grote kan het hoofdpijn worden. Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een positief punt te geven