Sammenligningstabel
Grunnlag for sammenligning | Enkel arv | Flere arv |
---|---|---|
grunn~~POS=TRUNC | Avledet klasse arver en enkelt baseklasse. | Avledet klasse arver to eller flere enn to grunnklasser. |
Gjennomføring | Klasse derived_class: access_specifier grunnklasse | Klasse avledet _klasse: access_specifier base_class1, access_specifier base_class2, .... |
Adgang | Avledet klasse tilgang funksjonene i single base klasse | Avledet klasse tilgang til de kombinerte funksjonene i arvelige grunnklasser |
Synlighet | Offentlig, Privat, Beskyttet | Offentlig, Privat, Beskyttet |
Kjøretid | Krever liten mengde kjøretid over hodet | Krever ekstra runtime overhead sammenlignet med enkelt arv |
Definisjon av enkelt arv
I enkelt arv er det en enkelt baseklasse og en enkelt avledet klasse. Avledet klasse arver basisklassen enten offentlig, beskyttet og privat. Medlemmene av grunnklassen kan nås av avledet klasse i henhold til tilgangspesifikasjonen spesifisert under arve til baseklassen.
La oss få et eksempel på virkelige liv, vi har to klasser, en "kontoklasse" og en "sparekonto klasse". Her kan "sparekonto klasse" arve funksjonen til "konto klasse", så klassen "konto klasse" blir base / super / foreldre klasse for å lagre konto klassen, og "lagring av konto klasse" vil være en avledet klasse.
Her er "konto klassens" attributter acc_no (private) og balanse (offentlig), og medlemsfunksjonene initialiseres (), get_accno () som er offentlige. Nå blir "konto klassen" arvet til å "lagre kontoklassen" offentlig, så alle offentlige medlemmer av "kontoklassen" kan nås direkte av "lagre kontoklasse". Den kan få tilgang til det private medlemmet av "kontoklassen" gjennom offentlige medlemsfunksjoner av "kontoklasse", men kan ikke få tilgang til dem direkte.
Gjennomføring av enkelt arv:
# inkluderer å bruke navnet space std; Klassekonto {int acc_no;; offentlig: flytbalanse; void initialisere (int x, int y) {acc_no = x; balanse = y; } int get_accno. () {return acc_no; }}; klasse Saving_acc: offentlig konto {float intrest_rate; offentlig: // konstruktør av Saving_acc klasse Saving_acc (int c) {interest_rate = c; } ugyldig visning () {cout <Definisjon av flere arv
Flere arv gjør at avledet klasse arver kombinerte egenskaper i mer enn en grunnklass, dvs. vi har enkeltavledd klasse og flere grunnklasser. Hver grunnklass må arves ved å nevne separat tilgangsspesifikator for hver av dem. En avledet klasse kan få tilgang til medlemmene av grunnklassene basert på tilgangsspesifikatoren som baseklassen er arvet til.
La oss gjøre det lettere med eksempelet vi har tre klasser, dvs. sykkel, bil og kjøretøy. Nå kan "Vehicle" arve funksjonene til "Bike" så vel som "Car". Så, "Vehicle" blir avledet klasse og "Bike" og "Car" blir grunnklassen. Nå er "Bike" og "Car" offentlig arvet av "Vehicle", den kan få tilgang til alle offentlige medlemmer av "Bike" og "Car", men som vi har en enhet Model_no beskyttet i "Car" så privat til bil, men kan være nås med "Kjøretøy".
Implementering av Multiple Arv:
# inkluderer å bruke navneområde std; Klasse Bike {int engine_cost; ; offentlig: void set_engine_cost (int x) {engine_cost = x; }}; klasse bil {beskyttet: int Model_no; offentlig: void set_Model_no (int p) {Model_no = p; }}; klasse Kjøretøy: offentlig Bike, offentlig bil {int no_of_wheels offentlig: vehical (int w) {no_of_wheels = w; cout << "ingen hjul" <Viktige forskjeller mellom enkelt og flere arv
- Enkelt arv er en avledet klasse som har en enkelt baseklasse, mens den i flere arv har to eller flere enn to grunnklasser, men en enkelt avledet klasse.
- Flere arv er ganske forvirrende, da her en enkelt avledet klasse arver to eller flere grunnklasser. Hvis grunnklassene har et attributt eller en funksjon med samme navn, så for avledet klasse, blir det vanskelig å identifisere hvilken basklassens attributt eller funksjon den den skal utlede.
- Overhead problemer er mindre i tilfelle enkelt arv. Men i tilfelle av flere arv bygger på objektet konstruksjon eller ødeleggelse konstruktørene og destruktoren til foreldreklassen i klasshierarkiet som øker overhead.
- Enkelt arv er mer mot spesialisering. Mens flere arv er mer mot generalisering.
- Som enkelt arv har mindre overhead har den mindre kjøretid sammenlignet med flere arv.
Konklusjon
Arv gjør programmererens arbeid enkelt som om en klasse allerede er dannet, dets funksjoner kan tilpasses av andre hvis det er nødvendig. Selv om tilgangsspesifikatoren begrenser tilgangen til medlemmer av en grunnklasse på en bestemt måte, men det gjør data sikrere. Enkel arv er på en eller annen måte enklere og enklere å implementere enn flere arv. Arv reduserer størrelsen på objektkoden, men påvirker også programmets kjøretid.