Sammenligningstabel
Grundlag for sammenligning | Enkelt Arv | Flere arv |
---|---|---|
Grundlæggende | Afledt klasse arver en enkelt base klasse. | Afledt klasse arver to eller flere end to basisklasser. |
Implementering | Klasse derived_class: access_specifier base klasse | Klasse afledt _klasse: access_specifier base_class1, access_specifier base_class2, .... |
Adgang | Afledt klasse adgang funktionerne i single base klasse | Afledt klasse adgang til de kombinerede træk af arvede basklasser |
Sigtbarhed | Offentlig, Privat, Beskyttet | Offentlig, Privat, Beskyttet |
Kør tid | Kræv små mængder løbetid over hovedet | Kræv ekstra runtime overhead i forhold til enkelt arv |
Definition af enkelt arv
I enkelt arv er der en enkelt base klasse og en enkelt afledt klasse. Afledt klasse arver basisklassen enten offentligt, beskyttet og privat. Medlemmerne af grundklassen kan få adgang til afledt klasse i overensstemmelse med adgangsspecifikationen, der er angivet under arve i basisklassen.
Lad os have et virkelighedseksempel, vi har to klasser, en "kontoklasse" og en "sparekontoklasse". Her kan "sparekontoklasse" arve funktionen af "kontoklasse", så klassen "kontoklasse" bliver base / super / overordnet klasse for at gemme kontoklassen, og "gemme kontoklasse" vil være en afledt klasse.
Her er "kontoklassens" attributter acc_no (private) og balance (offentlige), og medlemsfunktioner initialiseres (), get_accno (), som er offentlige. Nu bliver "konto klasse" arvet til at "gemme konto klasse" offentligt, så alle offentlige medlemmer af "konto klasse" kan få direkte adgang til "gemme konto klasse". Den kan få adgang til det private medlem af "konto klasse" gennem offentlige medlemsfunktioner af "kontoklasse", men kan ikke få adgang til dem direkte.
Gennemførelse af enkelt arv:
# inkluderer at bruge navneplads std; klasse konto {int acc_no, ; offentlig: flydebalance void initialisere (int x, int y) {acc_no = x; balance = y; } int get_accno. () {return acc_no; }}; klasse Saving_acc: offentlig konto {float intrest_rate; offentlig: // konstruktør af Saving_acc klasse Saving_acc (int c) {interest_rate = c; } void display () {cout <Definition af flere arv
Flere arv tillader afledte klasser at arve kombinerede træk i mere end en basisklasse, dvs. vi har enkeltafledt klasse og flere baseklasser. Hver basisklasse skal arves ved at nævne den separate adgangsspecifikator for hver af dem. En afledt klasse kan få adgang til medlemmerne af basisklasser baseret på den adgangsspecifikator, hvormed basisklassen er arvet.
Lad os gøre det nemmere med eksemplet, vi har tre klasser, dvs cykel, bil og køretøj. Nu kan "Vehicle" arve funktionerne i "Bike" samt "Car". Så, "Vehicle" bliver afledt klasse og "Bike" og "Car" bliver grundklassen. Nu er "Bike" og "Car" offentligt arvet af "Vehicle", den har adgang til alle offentlige medlemmer af "Bike" og "Car", men da vi har en enhed Model_no beskyttet i "Car" så privat til Bil, men det kan være adgang til "Vehicle".
Implementering af Multiple Arv:
# inkluderer at bruge navneområde std; klasse cykel {int engine_cost; ; offentligt: void set_engine_cost (int x) {engine_cost = x; }}; klasse bil {beskyttet: int Model_no; offentligt: void set_Model_no (int p) {Model_no = p; }}; klasse køretøj: offentlig cykel, offentlig bil {int no_of_wheels public: vehical (int w) {no_of_wheels = w; cout << "ingen hjul" <Nøgleforskelle mellem enkelt og flere arveligheder
- Enkelt arv er en afledt klasse, der har en enkelt baseklasse, mens den i flere arv har to eller flere end to basisklasser, men en enkelt afledt klasse.
- Flere arv er ret forvirrende, da her en enkelt afledt klasse arver to eller flere baseklasser. Hvis basisklasserne har en egenskab eller en funktion med samme navn, så for afledt klasse, bliver det svært at identificere, hvilken basklassens egenskab eller funktion den skal udlede.
- Overhead problemer er mindre i tilfælde af enkelt arv. Men i tilfælde af multipel arv anvender objektets konstruktion eller ødelæggelse konstruktørerne og destruktoren af forældrenes klasse i klassehierarkiet, hvilket øger overhead.
- Enkelt arv er mere i retning af specialisering. Mens flere arv er mere i retning af generalisering.
- Da enkelt arv har mindre overhead, har den mindre runtime i forhold til flere arv.
Konklusion
Arv gør programmererens arbejde let, som om en klasse allerede er dannet, dets funktioner kan tilpasses af andre, hvis det kræves. Selv om adgangsspecifikke begrænser adgangen til medlemmer af en base klasse på en bestemt måde, men det gør data mere sikre. Enkelt arv er på en eller anden måde mere enklere og nem at implementere end flere arv. Arv reducerer størrelsen på objektkode, men påvirker også programmets løbetid.