Hjem Personlig finansiering C ++ Programmering: Når er en virtuell funksjon ikke? - dummies

C ++ Programmering: Når er en virtuell funksjon ikke? - dummies

Video: Writing 2D Games in C using SDL by Thomas Lively 2025

Video: Writing 2D Games in C using SDL by Thomas Lively 2025
Anonim

I C ++, bare fordi du tror at et bestemt funksjonsanrop er bundet sent betyr det ikke at det er. Hvis ikke deklarert med de samme argumentene i underklassene, blir medlemsfunksjonene ikke overstyrt polymorphically, uansett om de er deklarert virtuelt.

Ett unntak til den samme deklarasjonsregelen er at hvis medlemsfunksjonen i grunnklassen returnerer en peker eller referanse til en basisklasseobjekt, kan en overstyrt medlemsfunksjon i en underklasse returnere en peker eller referanse til en gjenstand av underklasse. Med andre ord, funksjonen makeACopy () er polymorf, selv om returtypen for de to funksjonene er forskjellig:

klasse Base {public: // returnere en kopi av det nåværende objektet Base * makeACopy ();}; klasse SubClass: offentlig Base {public: // returnere en kopi av det nåværende objektet SubClass * makeACopy ();}; void fn (Base & bc) {Base * pCopy = bc. lag en kopi(); // Fortsett på …}

I praksis er dette ganske naturlig. En makeACopy () -funksjon skal returnere et objekt av typen SubClass , , selv om det kan overstyre BaseClass:: makeACopy () .

Denne virksomheten av stillhet bestemmer når en funksjon er overstyrt, og når ikke, er en feilkilde i C ++; så mye at 2011-standarden introduserte beskrivelsen overstyr som programmereren kan bruke til å indikere at hun har til hensikt å overstyre en baseklassefunksjon.

C ++ genererer en kompilatorfeil hvis en funksjon erklæres å overstyre, men overstyrer ikke en grunnklassefunksjon av en eller annen grunn (for eksempel et feilparametert argument) som i følgende eksempel: >

Class Student {public: virtual void addCourseGrade (dobbel klasse);}; klasse GradStudent: offentlig student {offentlig: virtuell ugyldig addCourseGrade (float grade) override;};
Denne brikken genererer en kompileringstidsfeil fordi metoden GradStudent:: addCourseGrade (float) ble erklært forstyrret, men den overstyrer ikke grunnleggende klassefunksjonen Student:: addCourseGrade (dobbel) fordi argumenttypene don ' t-kamp.

Programmereren kan også deklarere en funksjon som ikke overstyrbar ved hjelp av

siste søkeordet, selv om den funksjonen selv tilsidesætter noen tidligere baseklassefunksjon, som vist i følgende tilleggsinformasjon > PostDoc klasse: klasse GradStudent: offentlig student {offentlig: virtuell void addCourseGrade (double grade) final;}; klasse PostDoc: public GradStudent {public: virtual void addCourseGrade (dobbel klasse);}; Siden Student:: addCourseGrade () er merket endelig

,

erklæringen av PostDoc:: addCourseGrade () genererer en feil fordi den forsøker å overstyre Student metoden.

I tillegg kan en hel klasse deklareres

endelig:

klasse GradStudent-finalen: offentlig student Dette påvirker mer enn bare de virtuelle metodene til klassen. En

siste

klasse kan ikke arves fra det hele tatt.

C ++ Programmering: Når er en virtuell funksjon ikke? - dummies

Redaktørens valg

Hvordan lage Baseball Practice Fun - Dummies

Hvordan lage Baseball Practice Fun - Dummies

Som baseball trener må du ikke bare lære laget ditt grunnleggende i spillet, må du lære disse grunnleggende morsomme, slik at spillerne blir interessert og engasjert. Bruk tipsene i følgende liste for å gjøre baseballøvelsen morsom: Sørg for mange repetisjoner for hvert barn. Stopp treningen kort ...

Basisspillers ansvar i Baseball - dummies

Basisspillers ansvar i Baseball - dummies

Baseball trener er ikke bare ansvarlige for lagspillet som en hel, men for coaching spillere når de når første og tredje base i løpet av et baseballspill. Ansvaret for å coaching hver base er forskjellig. Hva en første basissjåfør gjør: Oppfordrer smeten til å kaste ned første baseline på infield hits. ...

Hvordan fantasy baseball ligaene blir scoret - dummies

Hvordan fantasy baseball ligaene blir scoret - dummies

Fantasy baseball har tre hovedspillformater som bestemmer hvordan ligaen din score punkter. Spillformatene for fantasybaseball er Rotisserie, Head-to-Head One Win og Point System. Hvert format blir scoret avhengig av ligaoppsettet. For eksempel vil 5 × 5 liga score poeng eller gevinster / tap på fem forhåndsvalgte treffstatistikk, samt fem ...

Redaktørens valg

Praktiserer dag til dag, uformell oppmerksomhet - dummies

Praktiserer dag til dag, uformell oppmerksomhet - dummies

Kan trene det når som helst. Uformell oppmerksomhet meditasjon er når du trener oppmerksomhet uten å skille ut en spesiell tid for det. Her er ti eksempler på uformell oppmerksomhet: Mindful kommunikasjon - Når du snakker eller hører på noen andre, blir du klar over lyden av ...

Forbli lekfull og lyshjerte når du praktiserer Mindfulness - dummies

Forbli lekfull og lyshjerte når du praktiserer Mindfulness - dummies

En nydelig holdning til å ha oppmerksomhet og Livet generelt er lekenhet og lethed. Hvis en meditasjon ikke virker for deg første gang eller ikke føles riktig for deg, ikke vær panikk, men tenk på opplevelsen som et eksperiment som du kan prøve igjen senere. Tilnærming oppmerksomhet som du ville et nytt spill eller ...

Redaktørens valg

Valg av resolusjonsstørrelse på et Canon EOS Rebel T3-serie kamera - dummies

Valg av resolusjonsstørrelse på et Canon EOS Rebel T3-serie kamera - dummies

For å bestemme seg for en Kvalitetsinnstilling (eller bildeoppløsningstørrelse) for Canon Rebel T3 eller T3i, den første avgjørelsen du må gjøre er hvor mange piksler du vil at bildet skal inneholde. Piksler er de små firkantede fliser hvorfra alle digitale bilder er laget; piksel er kort for bildeelement. Hvis din ...

Hvordan du lager videobilder på Rebel T7i / 800D - dummies

Hvordan du lager videobilder på Rebel T7i / 800D - dummies

Videoopplastingsfunksjonen på Canon EOS Rebel T7i / 800D fanger korte videoklipp som er sydd i et enkelt opptak, kalt et videoalbum. Du kan stille klippelengden til 8, 4 eller 2 sekunder lang (men alle klippene i et album må ha samme lengde). Med tanke på individets korthet ...