Hjem Personlig finansiering Abstrakte klasser og C ++ dummier

Abstrakte klasser og C ++ dummier

Video: [C++ von { bis }] 14 - Abstrakte Klassen 2024

Video: [C++ von { bis }] 14 - Abstrakte Klassen 2024
Anonim

C ++ støtter sen binding , som er når det løser en metodeanrop basert på løpstid type (eller dynamisk type) av målobjektet i stedet for den oppgitte typen (eller statisk type). Dette er demonstrert i følgende C ++ kodebit:

#include using namespace std; klassen Ovn {offentlig: virtuell tomromkoker () {cout << "matlaging med en ovn" << endl;}}; klasse MicrowaveOven: public Oven {public: virtual void cook () {cout << "matlaging med mikrobølgeovn" << endl;}}; void preparationMeal (Ovn og ovn) {ovn. koker ();}

I funksjonen prepareMeal (), kalles til ovn. Kok () kan passere til Ovnen:: Kok () eller Mikrobølgeovn:: Kok () avhengig av kjøretiden (den "aktuelle") typen av ovnen gjenstanden.

Det virtuelle søkeordet er kritisk her. Uten det ville koken () -metoden være bundet tidlig, basert på kompileringstiden, og påkalle Oven:: cook () hver gang. Når det er blitt erklært virtuelt i Ovn-klassen, antas metoden å være virtuell i hver underklasse, men det gjør ikke vondt for å gjenta erklæringen slik at leserne forstår.

Følgende enkle program demonstrerer dette prinsippet i praksis:

int main () {Ovnen; prepareMeal (ovn); MicrowaveOven mo; prepareMeal (mo); returnere 0;}

I dette programmet genererer anropet til å lage mat () to forskjellige utganger avhengig av ovnen:

Koking med en stekeovn Koking med mikrobølgeovn

Det er ikke alltid tilfelle, at en metode i grunnklassen kan defineres. Vurder ovnen saken mer nøye. Det finnes en rekke forskjellige typer ovner - konvensjonelle ovner, konveksjon ovner og mikrobølgeovner - men man kan hevde at det ikke er noen egentlig ovn som ikke tilhører en av disse underklassene. Du kan kanskje si hvordan ulike ovnformer utfører kokkoperasjonen - det vil si hva en KonvensjonellOven:: kokk () og en MicrowaveOven:: cook () skal gjøre kan defineres. Det er sannsynligvis ikke mulig å definere hvilke handlinger Oven:: cook () skal utføre.

Du kan ikke bare forlate Oven:: cook () sort i et sterkt skrevet språk som C ++. Du kan imidlertid erklære en metode, men la den være unimplemented hvis det ikke finnes noen implementering. En bruker følgende nysgjerrige syntaks for å gjøre det:

klasse Ovn {offentlig: virtuell tomrom () = 0;};

Denne koden erklærer en metode Ovn:: kokk () som er bundet sent, men implementerer ikke metoden. Faktisk går det videre ved å si at metoden ikke vil bli implementert. I C ++ er en slik metode sies å være ren virtuell . C ++ programmerere bruker også termen som er foretrukket i mange andre kraftig tastede dataspråk: abstrakt .Ovnen klassen sies å være abstrakt.

Et abstrakt representerer en egenskap som du vet at klassen besitter, men vet ikke hvordan man skal utføre entydig i dagens klasse.

En klasse er abstrakt hvis den inneholder en eller flere rene virtuelle metoder. Betydningen av dette er at du ikke kan ordne en abstrakt klasse. Følgende er ikke lenger tillatt:

int main () {Ovnen; prepareMeal (ovn); return 0;}

Årsaken til dette er ganske enkelt: Hvis du opprettet et objekt av klasse Ovn og deretter prøvde å påkalle ovnen. kokk (), hva skal kompilatoren gjøre?

På et mer filosofisk nivå er det fint å si at det er noen vanlige begreper som heter Ovn som beskriver konvensjonelle ovner og mikrobølgeovner og konveksjonsovner. Denne termen Ovn er et vanlig konsept fordi det binder opp likhetene i alle disse underklassene. Men det er ingen forekomst av en ovn som ikke er en av ovnens underklasser.

En underklasse av en abstrakt klasse er i seg selv abstrakt inntil alle rene virtuelle metoder har blitt tilsidesatt av ikke-abstrakte (det vil si konkrete ) versjoner. Derfor er klassen MicrowaveOven i forrige kodebit ikke abstrakt - selv om Oven var abstrakt - fordi den overstyrer cook () med sin egen konkrete versjon.

Merk at det ikke er noe galt med funksjonen prepareMeal () definert som følger:

void preparationMeal (Ovn og ovn) {ovn. kokk ();}

Selv om argumentet er erklært å være en Ovn, kan det bare påberopes med noen underklasse Ovnen, for eksempel MicrowaveOven eller ConventionalOven, for hvilken kokk () er definert.

Abstrakte klasser og C ++ dummier

Redaktørens valg

Vanlige medikamenteffekter for legeassistenteksamen - dummies

Vanlige medikamenteffekter for legeassistenteksamen - dummies

Bli kjent med vanlige bivirkninger for legeassistenteksamen (PANCE). Den gjennomsnittlige personen over 60 år tar omtrent ni reseptbelagte medisiner og ser minst fire forskjellige helsepersonell. Potensialet for noen til å oppleve bivirkningene av disse medisinene er enorm, og det er potensialet for signifikante legemiddelinteraksjoner. ...

Epidemiologiske studier dekket av legeassistenteksamen - dummies

Epidemiologiske studier dekket av legeassistenteksamen - dummies

For legeassistenteksamen (PANCE) du bør være oppmerksom på forskjellene mellom typer epidemiologiske studier. Det første trinnet er å gjenkjenne om studiet er en retrospektiv studie eller en prospektiv studie: Retrospektiv: En retrospektiv studie betyr at du ser på fortiden for å finne ut hva som skjedde. For eksempel, en ...

Forhold som påvirker pleura dekket på legeassistenteksamen - dummies

Forhold som påvirker pleura dekket på legeassistenteksamen - dummies

Du kan se Spørsmål om legeassistenteksamen om forhold som påvirker pleura. Du må vurdere evaluering og behandling av pleural effusions, pneumothorax og pleurisy. Væske rundt lungene: Pleural effusjon Normalt er pleura et tomt rom; en pleural effusjon er ganske enkelt væske som opptar den plassen. Pleural ...

Redaktørens valg

Slik setter du automatiske varsler på LinkedIn - dummies

Slik setter du automatiske varsler på LinkedIn - dummies

Sikkert, du kan gjøre alt fotverket ved å gå til LinkedIn hjemmesiden og ser deg rundt for å se hvilke meldinger eller endringer som har skjedd. Den sanne kraften til å holde kontakten, har imidlertid LinkedIn, kontakter deg automatisk med den informasjonen du trenger for å holde deg informert. Klikk på Administrer-koblingen ved siden av Personvern og innstillinger ...

Tips for å administrere dine LinkedIn Post-interaksjoner - dummies

Tips for å administrere dine LinkedIn Post-interaksjoner - dummies

Når du klikker Publiser på LinkedIn, kan du tenke at jobb er ferdig, men det er bare begynt. Etter hvert som flere og flere leser innlegget ditt, kan de samhandle med innlegget og med deg som forfatter. Her er noen ting å huske på etter at du har publisert et innlegg: Overvåk statistikken. Når du ...

Forstå LinkedIn Pulse - dummies

Forstå LinkedIn Pulse - dummies

Har du sjekket ut LinkedIn Pulse ennå? Tenk deg om du leser en avis som bare viste deg artikler som har betydning for deg. (For det hele, for mange av dere, tenk på de dagene du kanskje har lest en avis.) Tilpassede nyheter er mulige, og på LinkedIn kalles det LinkedIn Pulse. Alt du trenger å gjøre for å ...

Redaktørens valg

Hva Dragon NaturallySpeaking kan gjøre for deg - dummies

Hva Dragon NaturallySpeaking kan gjøre for deg - dummies

Noe om å diktere til en datamaskin vekker alle slags urealistiske forventninger hos mennesker. Hvis du forventer at du skal servere deg frokost på sengen, har du lykke til. Denne artikkelen ble ikke skrevet ved å si "Computer, skriv en bok om NaturallySpeaking. "Forfatteren måtte diktere det ord for ord, akkurat som hun ville hatt ...

Når Start ikke starter i NaturallySpeaking - dummies

Når Start ikke starter i NaturallySpeaking - dummies

Når du gir kommandoen "Start" til Dragon NaturallySpeaking, du sier "Start America Online" eller "Start Microsoft Works" eller "Start Quicken", og programmet skal åpnes. Men hva hvis det ikke gjør det? Hva er greia? Start-kommandoen starter et program som er installert på maskinen din, og har enten et snarveisikon på ...

Når NaturallySpeaking Menykommandoer ikke fungerer - dummies

Når NaturallySpeaking Menykommandoer ikke fungerer - dummies

Når du gir en kommando til NaturallySpeaking, for eksempel "Klikk" og ingenting skjer, det sannsynlige problemet er at menyen Bruk menyer som er kompatible med skjermlesere, ikke er merket av. For å sjekke det: Velg Verktøy → Valg i vinduet NaturallySpeaking. Det er ikke noe poeng å fortelle deg hvordan du får tilgang til dette med stemmen, for det er akkurat ...