Aanbevolen, 2024

Editor'S Choice

Verschil tussen enkele en meervoudige overerving

Overname ondersteunt het concept van herbruikbaarheid sterk, maw nieuw gecreëerde klasse hergebruikt de eigenschappen van reeds bestaande klassen. Access specifier bepaalt de manier waarop het basisklasse-lid wordt overgenomen door de afgeleide klasse. Er zijn veel manieren om overerving te verkrijgen, single, multiple, Hierarchical, Multilevel, Hybrid. Terwijl ons belangrijkste gespreksonderwerp het verschil is tussen single en multiple inheritance. In single inheritance hebben we slechts één basisklasse die wordt geërfd door slechts één afgeleide klasse. In multiple inheritance hebben we meer dan twee basisklassen die gecombineerd worden geërfd door slechts één afgeleide klasse.


Vergelijkingstabel

Basis voor vergelijkingEnkele overervingMeervoudige overerving
basis-Afgeleide klasse erft een enkele basisklasse.Afgeleide klasse erft twee of meer dan twee basisklasse.
ImplementatieClass derived_class: access_specifier base classKlasse afgeleid _class: access_specifier base_class1, access_specifier base_class2, ....
Toegang
Afgeleide klasse heeft toegang tot de kenmerken van een enkele basisklasseAfgeleide klassen hebben toegang tot de gecombineerde functies van overgeërfde basisklassen
ZichtbaarheidOpenbaar, privé, beschermdOpenbaar, privé, beschermd
LooptijdVereis een kleine hoeveelheid looptijd boven het hoofdExtra runtime-overhead vereist in vergelijking met single inheritance

Definitie van enkele overerving

In Single inheritance is er een enkele basisklasse en een enkele afgeleide klasse. Afgeleide klasse erft de basisklasse, hetzij openbaar, beschermd en privé. De leden van de basisklasse kunnen worden benaderd per afgeleide klasse volgens de toegangsspecificatie die is opgegeven tijdens het erven van de basisklasse.

Laten we een realistisch voorbeeld geven, we hebben twee klassen, een "accountklasse" en een "spaarrekeningklasse". Hier kan "spaarrekeningklasse" de functie van "rekeningklasse" erven, dus klasse "rekeningklasse" wordt basis / super / ouderklasse voor het opslaan van rekeningklasse, en "spaarrekeningklasse" zal een afgeleide klasse zijn.

Hier zijn attributen van "account class" acc_no (privé) en saldo (public), en lidfuncties zijn initialize (), get_accno () die openbaar zijn. Nu wordt "accountklasse" overgeërfd naar "accountklasse opslaan", dus alle openbare leden van "accountklasse" kunnen direct worden benaderd door "accountklasse op te slaan". Het kan toegang krijgen tot het privélid van "accountklasse" via openbare ledenfuncties van "accountklasse", maar kan hier niet rechtstreeks toegang toe krijgen.

Implementatie van enkele overerving:

 # include name space std; class Account {int acc_no, ; publiek: vlotterbalans; void initialize (int x, int y) {acc_no = x; saldo = y; } int get_accno. () {return acc_no; }}; class Saving_acc: public Account {float intrest_rate; public: // constructor van Saving_acc class Saving_acc (int c) {interest_rate = c; } void display () {cout < 

Definitie van Multiple Inheritance

Meerdere overerving maakt het voor afgeleide klassen mogelijk om gecombineerde kenmerken van meer dan één basisklasse te erven, dwz we hebben enkele afgeleide klassen en meerdere basisklassen. Elke basisklasse moet worden geërfd door voor elk daarvan de afzonderlijke toegangsspecificatie te vermelden. Een afgeleide klasse kan toegang krijgen tot de leden van basisklassen op basis van de toegangsspecificatie waarmee de basisklasse wordt overgenomen.

Laten we het gemakkelijker maken met het voorbeeld we hebben drie klassen, namelijk Fiets, Auto en Voertuig. Nu kan "voertuig" de functies van "Fiets" en "Auto" erven. Dus, "Voertuig" wordt afgeleid klasse en "Fiets" en "Auto" wordt de basisklasse. Nu, "Fiets" en "Auto" worden publiekelijk geërfd door "Voertuig", het heeft toegang tot alle openbare leden van "Fiets" en "Auto" maar omdat we een entiteit hebben Model_no beschermd in "Auto", dus het is privé voor Auto, maar kan toegankelijk via "Voertuig".

Implementatie van Meerdere Erfenis:

 # include namespace std; klasse Bike {int engine_cost; ; public: void set_engine_cost (int x) {engine_cost = x; }}; class Car {protected: int Model_no; public: void set_Model_no (int p) {Model_no = p; }}; klasse Vehical: public Bike, public car {int no_of_wheels public: vehical (int w) {no_of_wheels = w; cout << "geen wielen" < 

Belangrijkste verschillen tussen enkele en meervoudige overerving

  1. Enkele overerving is één afgeleide klasse met een enkele basisklasse, terwijl deze bij meerdere overervingen twee of meer dan twee basisklassen heeft, maar één afgeleide klasse.
  2. Meerdere overerving is nogal verwarrend omdat hier een enkele afgeleide klasse twee of meer basisklasse erven. Als de basisklassen een attribuut of functie met dezelfde naam hebben, wordt het voor afgeleide klassen moeilijk om vast te stellen aan welk kenmerk of welke functie van die basisklasse het is om het af te leiden.
  3. Overheadproblemen zijn minder in het geval van één enkele erfenis. Maar in het geval van meerdere overerving beroept de objectconstructie of vernietiging de constructors en destructor van de ouderklasse in de klassehiërarchie die de overhead verhoogt.
  4. Eén erfenis is meer richting specialisatie. Terwijl meervoudige erfenis meer richting generalisatie gaat.
  5. Omdat single inheritance minder overhead heeft, heeft het minder runtime in vergelijking met multiple inheritance.

Conclusie

Overerving maakt het werk van de programmeur gemakkelijk, alsof een klasse al is gevormd en de functies ervan door anderen kunnen worden aangepast indien nodig. Hoewel de toegangsspecificatie de toegang tot leden van een basisklasse op een bepaalde manier beperkt, maar het maakt gegevens veiliger. Enkele overerving is op een of andere manier eenvoudiger en eenvoudiger te implementeren dan meerdere overerving. Overerving verkleint de grootte van de objectcode, maar heeft ook invloed op de uitvoeringstijd van het programma.

Top