Huis Persoonlijke financiën C ++ Programmeren: wanneer is een virtuele functie niet? - dummies

C ++ Programmeren: wanneer is een virtuele functie niet? - dummies

Video: Hotpoint-Ariston ELTF11M121CEU vaatwasser. Volledig integreerbare vaatwasser van Hotpoint 2024

Video: Hotpoint-Ariston ELTF11M121CEU vaatwasser. Volledig integreerbare vaatwasser van Hotpoint 2024
Anonim

in C ++, alleen omdat u denkt dat een bepaalde functie-aanroep te laat is gebonden, niet betekent dat dat zo is. Indien niet gedeclareerd met dezelfde argumenten in de subklassen, worden de lidfuncties niet polymorf gedicteerd, ongeacht of ze virtueel verklaard zijn of niet.

Een uitzondering op de identieke declaratieregel is dat als de lidfunctie in de basisklasse een aanwijzer of verwijzing naar een basisklasseobject retourneert, een overschreven lidfunctie in een subklasse een aanwijzer of verwijzing naar een object van de subklasse kan retourneren. Met andere woorden, de functie makeACopy () is polymorf, hoewel het retourneertype van de twee functies verschilt:

class Base {public: // retourneer een kopie van het huidige object Base * makeACopy ();}; class SubClass: public Base {public: // retourneer een kopie van het huidige object SubClass * makeACopy ();}; void fn (Base & bc) {Base * pCopy = bc. een kopie maken(); // ga verder …}

In de praktijk is dit vrij natuurlijk. Een makeACopy () -functie zou een object van het type SubClass , moeten retourneren, zelfs als dit BaseClass zou kunnen overschrijven:: makeACopy () .

Dit is het stilzwijgend beslissen wanneer een functie wordt opgeheven en wanneer dit geen bron van fouten is in C ++; zozeer zelfs dat de norm uit 2011 de descriptor negeren introduceerde die de programmeur kan gebruiken om aan te geven dat ze van plan is een basisklasse-functie te negeren.

C ++ genereert een compileerfout als een functie wordt gedeclareerd maar negeert, in feite, een basisklasse-functie om de een of andere reden (zoals een niet-overeenkomend argument) zoals in het volgende voorbeeld: >

class Student {public: virtual void addCourseGrade (double grade);}; klasse GradStudent: public Student {public: virtuele ongeldige addCourseGrade-overschrijving (float grade);};
Dit fragment genereert een compileerfout omdat de methode GradStudent:: addCourseGrade (float) is gedeclareerd maar dit heeft in feite niet de basisklassefunctie overschreven Student:: addCourseGrade (dubbel) omdat de argumenttypen niet ' t match.

Het programmeerapparaat kan ook een functie als niet-overbodig verklaren met het sleutelwoord

final , zelfs als die functie zelf een eerdere basisklasse-functie vervangt, zoals aangetoond in de volgende aanvullende > PostDoc klasse: klasse GradStudent: public Student {public: virtual void addCourseGrade (double grade) final;}; class PostDoc: public GradStudent {public: virtual void addCourseGrade (double grade);}; Aangezien Student:: addCourseGrade () is gemarkeerd als final

,

de declaratie van PostDoc:: addCourseGrade () genereert een fout omdat deze de methode Student negeert.

Bovendien kan een hele klas

definitief worden verklaard:

klasse GradStudent definitief: openbaar Student Dit is van invloed op meer dan alleen de virtuele methoden van de klas. Een

finale

-klasse kan helemaal niet worden geërfd.

C ++ Programmeren: wanneer is een virtuele functie niet? - dummies

Bewerkers keuze

Een Oracle-omgeving instellen - dummies

Een Oracle-omgeving instellen - dummies

Als u een typische PL / SQL-omgeving wilt instellen, hebt u de volgende componenten: Databaseserver: dit is een computer (of een reeks computers) die de Oracle-database uitvoert. Oracle werkt in veel populaire computeromgevingen. De meest gebruikte met Oracle zijn UNIX, Linux of een versie van Microsoft Windows. PL / SQL wordt meestal uitgevoerd ...

SQL-rijwaarden en -waarden - dummies

SQL-rijwaarden en -waarden - dummies

De waarden die worden bewaard in de cellen die de snijpunten van de SQL-database vormen De rijen en kolommen van de tabel zijn de grondstoffen waaruit u zinvolle relaties en trends kunt afleiden. Rijwaarden De meest zichtbare waarden in een database zijn tabelrijwaarden. Dit zijn de waarden die elke rij van een databasetabel ...

SQL eerste, tweede en derde normale vormen - dummies

SQL eerste, tweede en derde normale vormen - dummies

Er zijn drie bronnen van wijzigingsanomalieën in SQL Deze worden gedefinieerd als eerste, tweede en derde normale vormen (1NF, 2NF, 3NF). Deze normale vormen fungeren als remedies voor het wijzigen van anomalieën. Eerste normale vorm Om in de eerste normale vorm (1NF) te zijn, moet een tabel de volgende eigenschappen hebben: De tabel is tweedimensionaal met rijen en ...

Bewerkers keuze

Een kijkje nemen in het syndroom van Empty-Nest - dummies

Een kijkje nemen in het syndroom van Empty-Nest - dummies

Een veel voorkomende misvatting is dat wanneer de kinderen van een stel vertrekken thuis, zullen pappa en mama het syndroom van empty-nest ontwikkelen. Ja, ze hebben misschien een leeg nest, maar voor sommige paren bloeit hun liefdesleven in deze periode van hun leven. De slachtoffers van het syndroom zijn de paren waarvan de relatie uit elkaar valt als zij de enige ...

STD's: wat u moet weten over herpes - dummies

STD's: wat u moet weten over herpes - dummies

Herpes, veroorzaakt door het herpes simplex-virus (HSV) ), is een ongeneeslijke SOA. Herpes heeft eigenlijk twee vormen: herpes simplex-type 1 (HSV-1) en herpes simplex-type 2 (HSV-2). HSV-1 wordt meestal geassocieerd met koortsblaasjes en koortsblaren boven de taille. "Ongeveer 80 procent van de Amerikaanse volwassenen heeft orale herpes. Ongeveer 25 procent van ...

Tiener Geslacht: hoe te weten Hoe ver te gaan - dummies

Tiener Geslacht: hoe te weten Hoe ver te gaan - dummies

Een van de grootste vragen voor tieners is niet "Zou ik seks moeten hebben? "Maar" Hoe ver moet ik gaan? "Terwijl het eigen comfortniveau en dat van de partner de topprioriteit zou moeten zijn in deze beslissing, spelen andere factoren een rol, vooral als tieners dat amorfe concept van" het derde honk overwegen. "" Derde basis "...

Bewerkers keuze

Tien voorwaarden American Football Announcers Gebruik - dummies

Tien voorwaarden American Football Announcers Gebruik - dummies

Een van de moeilijkste en meest intimiderende onderdelen over het volgen van een Amerikaans voetbalwedstrijd is dat de presentatoren soms een vreemde taal lijken te spreken die alleen bekend is bij echte voetballiefhebbers. Maar als je een aantal belangrijke termen onthoudt, ben je ver voor op het spel. Hier zijn enkele voetbaltermen die je misschien hoort, ...

Het begin van een voetbalspel: The Kickoff - dummies

Het begin van een voetbalspel: The Kickoff - dummies

Voor Amerikaanse voetbalfans, de openingsaftrap is een opwindende start voor elke game. Ze zien de tweezijdige sensatie van het ene team dat probeert het andere te blokkeren en helpt de herhaler om door en voorbij 11 snelladers van het trapende team te rennen. (Wel, maak die tien spelers.De kicker staat meestal rond de 50-yard-lijn, ...

Uw voetbalcoachtoelen afstemmen op een leeftijdsgroep - dummies

Uw voetbalcoachtoelen afstemmen op een leeftijdsgroep - dummies

Elk kind in uw team is anders zoveel manieren. Sommigen zijn begaafde hardlopers, anderen kunnen duizelingwekkende vangsten maken en wat moeite om simpelweg de basistechnieken van het spel te vatten. Ongeacht de sterke en zwakke punten van de kinderen, die overal op de kaart staan, hebben jongeren algemene kenmerken die worden beïnvloed ...