Huis Persoonlijke financiën Abstracte klassen en C ++ - dummies

Abstracte klassen en C ++ - dummies

Video: Abstrakte Klassen und virtuelle Funktionen - C++ Tutorial 2024

Video: Abstrakte Klassen und virtuelle Funktionen - C++ Tutorial 2024
Anonim

C ++ ondersteunt late binding , , dat is wanneer het een methodeaanroep op basis van de runtime oplost type (of dynamische type) van het doelobject in plaats van het gedeclareerde type (of statische type). Dit wordt aangetoond in het volgende codefragment C ++:

# include namespace std; class Oven {public: virtual void cook () {cout << "cooking with an oven" << endl;}}; class MicrowaveOven: public Oven {public: virtual void cook () {cout << "koken met een magnetron" << endl;}}; void prepareMeal (Oven & oven) {oven. cook ();}

In de functie prepareMeal (), de oproep naar oven. cook () kan doorgaan naar Oven:: cook () of MicrowaveOven:: cook () afhankelijk van de looptijd (het "werkelijke") type van het ovenobject dat is gepasseerd.

Het virtuele sleutelwoord is hier van cruciaal belang. Zonder dit zou de cook () -methode voortijdig worden vastgezet, gebaseerd op het compileertijdstype, en telkens opnieuw Oven:: cook () aanroepen. Eenmaal virtueel verklaard in de Oven-klasse, wordt aangenomen dat de methode virtueel is in elke subklasse, maar het doet geen pijn om de verklaring te herhalen, zodat lezers dit begrijpen.

Het volgende eenvoudige programma toont dit principe in de praktijk:

int main () {Ovenoven; prepareMeal (oven); MicrowaveOven mo; prepareMeal (mo); return 0;}

In dit programma genereert de call to cook () twee verschillende uitgangen afhankelijk van het type oven:

Koken met een oven Koken met een magnetron

Het is niet altijd het geval, dat een methode in de basisklasse kan worden gedefinieerd. Beschouw het ovenhuis voorzichtiger. Er zijn een aantal verschillende soorten ovens - conventionele ovens, convectieovens en magnetrons - maar men zou kunnen beweren dat er geen echte oven is die niet tot een van deze subklassen behoort. Je kunt misschien zeggen hoe de verschillende soorten ovens de kookbewerking uitvoeren - dat wil zeggen, wat een ConventionalOven:: cook () en een MicrowaveOven:: cook () zou moeten kunnen worden gedefinieerd. Het is waarschijnlijk niet mogelijk om te definiëren welke acties Oven:: cook () moet uitvoeren.

Je kunt Oven niet gewoon verlaten:: cook () undeclared in een sterk getypte taal zoals C ++. U kunt echter een methode declareren , maar niet geïmplementeerd laten als er geen implementatie bestaat. Men gebruikt de volgende merkwaardige syntaxis om dit te doen:

class Oven {public: virtual void cook () = 0;};

Deze code declareert een methode Oven:: cook () die te laat is ingebonden, maar de methode niet implementeert. In feite gaat het verder door te zeggen dat de methode niet zal worden geïmplementeerd. In C ++ wordt gezegd dat zo'n methode puur virtueel is. C ++ -programmeurs gebruiken ook de term die de voorkeur heeft in veel andere sterk getypte computertalen: abstract .De Oven-klasse is abstract.

Een abstract staat voor een eigenschap waarvan u weet dat de klasse in bezit is, maar niet weet hoe u ondubbelzinnig in de huidige klasse kunt implementeren.

Een klasse is abstract als deze een of meer pure virtuele methoden bevat. Het belang hiervan is dat je een abstracte klasse niet kunt instantiëren. Dus het volgende is niet langer toegestaan:

int main () {Oven oven; prepareMeal (oven); return 0;}

De reden hiervoor is vrij simpel: als je een object van klasse Oven hebt gemaakt en vervolgens hebt geprobeerd de oven in te schakelen. cook (), wat moet de compiler doen?

Op een meer filosofisch niveau is het prima om te zeggen dat er een gemeenschappelijke term is genaamd Oven die conventionele ovens en magnetrons en convectieovens beschrijft. Deze term Oven is een gebruikelijk concept omdat het de overeenkomsten in al deze subklassen bindt. Maar er is geen instantie van een oven die niet een van de subklassen van Oven is.

Een subklasse van een abstracte klasse is zelf abstract totdat alle pure virtuele methoden zijn opgeheven door niet-abstracte (dat wil zeggen concrete ) versies. Dus de klasse MicrowaveOven in het vorige codefragment is niet abstract - zelfs als Oven abstract was - omdat het cook () overschrijft met zijn eigen concrete versie.

Merk op dat er niets mis is met de functie prepareMeal () als volgt gedefinieerd:

void prepareMeal (Oven & oven) {oven. cook ();}

Hoewel het argument wordt aangegeven als een oven, kan het alleen worden opgeroepen met een subklasse van Oven, zoals MicrowaveOven of ConventionalOven, waarvoor cook () is gedefinieerd.

Abstracte klassen en C ++ - 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 ...