Hem Personliga finanser Abstrakt klasser och C ++-dummies

Abstrakt klasser och C ++-dummies

Video: C++ Tutorial #18 - Abstraktheit und Interfaces 2024

Video: C++ Tutorial #18 - Abstraktheit und Interfaces 2024
Anonim

C ++ stöder sen bindning , som är när det löser ett metodanrop baserat på körtiden typ (eller dynamisk typ) av målobjektet snarare än den angivna typen (eller statisk typ). Detta visas i följande C ++ kodbit:

#include using namespace std; klassugn {public: virtual void cook () {cout << "matlagning med en ugn" << endl;}}; klass MicrowaveOven: public Oven {public: virtual void cook () {cout << "matlagning med mikrovågsugn" << endl;}}; void preparationMeal (Ugn och ugn) {ugn. cook ();}

I funktionen prepareMeal (), anropet till ugnen. kocken () kan passera till ugn:: cook () eller microwaveOven:: cook () beroende på körtid (typ "aktuell") av ugnsobjektet som passerat.

Det virtuella sökordet är kritiskt här. Utan den skulle koden () -metoden vara bunden tidigt, baserat på kompileringstidstypen, och anropa ugnen:: cook () varje gång. En gång förklarad virtuell i ugnsklassen antas metoden vara virtuell i varje underklass, men det gör inte ont för att upprepa deklarationen så att läsarna förstår.

Följande enkla program visar denna princip i praktiken:

int main () {Ugn; prepareMeal (ugn); MicrowaveOven mo; prepareMeal (mo); returnera 0;}

I detta program genererar anropet för att laga mata () två olika utgångar beroende på typ av ugn:

Matlagning med ugn Matlagning med mikrovågsugn

Det är inte alltid fallet, att en metod i basklassen kan definieras. Tänk på ugnsfallet noga. Det finns ett antal olika typer av ugnar - konventionella ugnar, konvektionsugnar och mikrovågsugnar - men man kan hävda att det inte finns någon riktig ugn som inte hör till någon av dessa underklasser. Du kanske kan säga hur olika typer av ugnar utför kockoperationen - det vill säga, vilken konventionalOven:: cook () och en MicrowaveOven:: cook () ska göra kan definieras. Det är förmodligen inte möjligt att definiera vilka åtgärder Oven:: cook () ska utföra.

Du kan inte helt enkelt lämna ugn:: cook () svart i ett starkt skrivet språk som C ++. Du kan dock förklara en metod men lämna den otillräcklig om det inte finns någon implementering. Man använder följande nyfikna syntax för att göra det:

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

Denna kod förklarar en metod Ovnen:: cook () som är bunden sen men genomför inte metoden. Faktum är att det går vidare genom att säga att metoden inte kommer att genomföras. I C ++ sägs en sådan metod vara ren virtuell . C ++ -programmerare använder också termen som föredras i många andra starkt skrivna datorspråk: abstrakt .Ugnsklassen sägs vara abstrakt.

En abstrakt representerar en egenskap som du vet att klassen har men vet inte hur man implementerar entydigt i den nuvarande klassen.

En klass är abstrakt om den innehåller en eller flera rena virtuella metoder. Betydelsen av detta är att du inte kan instansera en abstrakt klass. Således är följande inte längre tillåtet:

int main () {Ovnen; prepareMeal (ugn); returnera 0;}

Anledningen till detta är ganska enkelt: om du skapade ett objekt av klassugn och försökte åka på ugnen. cook (), vad ska kompilatorn göra?

På en mer filosofisk nivå är det bra att säga att det finns en del vanliga begrepp som kallas ugn som beskriver konventionella ugnar och mikrovågsugnar och konvektionsugnar. Denna term Ovnen är ett vanligt koncept eftersom det binder upp likheterna i alla dessa underklasser. Men det finns ingen förekomst av en ugn som inte är en av Ovns underklasser.

En underklass av en abstrakt klass är själv abstrakt tills alla rena virtuella metoder har överträtts av icke-abstrakta (det vill säga konkreta ) versioner. Klassen MicrowaveOven i det föregående kodstycket är således inte abstrakt - även om ugnen var abstrakt - eftersom den överrätter cook () med sin egen konkreta version.

Observera att det inte är något fel på funktionen prepareMeal () definierad enligt följande:

void preparationMeal (Ugn och ugn) {ugn. kock ();}

Även om argumentet förklaras vara en ugn, kan det endast påkallas med någon underklass av ugn, t.ex. MicrowaveOven eller ConventionalOven, för vilken kock () definieras.

Abstrakt klasser och C ++-dummies

Redaktörens val

Hitta hur du betalar webbplatser i online dating - dummies

Hitta hur du betalar webbplatser i online dating - dummies

Du får vad du betalar för I livet ingår Internet-dating webbplatser. Till skillnad från gratis webbplatser, med lönesidor har du inte huvudvärk på oändliga reklammeddelanden som skriker i ditt ansikte. Dessutom är omfattningen av täckning och tillgängliga funktioner bred och robust. Solid tillsyn tillhandahålls (för att gräva ut wackos) och lämpliga hinder ...

Dating för Dummies Cheat Sheet - dummies

Dating för Dummies Cheat Sheet - dummies

Dating behöver inte vara nervös, men det kräver förberedelse . Du måste göra en uppriktig själsökning så att du är redo att vara ärlig, öppen och uppmärksam. Du behöver en stark känsla för dina dejtingförväntningar så att du tydligt kan kommunicera vad du letar efter utan att ställa in baren så hög att ingen ...

Få passar för dating igen efter 50 - dummies

Få passar för dating igen efter 50 - dummies

Copyright © 2014 AARP All rights reserved. Du behöver inte vara frisk och frisk efter 50, men det hjälper säkert om du är. Om du inte är något av dessa saker, behöver du inte ge upp och tycker att det är för sent att komma dit. Många börjar träningsregler så sent som ålder ...

Redaktörens val

ÄR ett au pair rätt för din familj? - dummies

ÄR ett au pair rätt för din familj? - dummies

Det är viktigt att undersöka dina specifika familjeförhållanden för att avgöra om ett au pair är rätt barnomsorg för din familj. Du kanske bestämmer dig för att anställa ett au pair i stället för daghem, barnbarn eller barnpassare om du vill utsätta din familj för en ny kultur. Är ...

Online-verktyg för familjebudgetar - dummies

Online-verktyg för familjebudgetar - dummies

Vissa familjer kan tycka att den mest användbara aspekten av att bo i en värld med nästan oändliga onlineverktyg innebär att kunna budgetera för familjen med dessa verktyg. Följande tre onlinetjänster erbjuder familjer ett sätt att organisera familjeutgifter online, dela åtkomst till säkra konton och eliminera några av papperet ...

Barn som Online Entreprenörer - Dummies

Barn som Online Entreprenörer - Dummies

Levande i en digital värld tillåter barnen obegränsade möjligheter när det gäller entreprenörskap. Denna digitala tidsålder ger barnen en unik färdighetssats med möjlighet att dela den färdigheten med andra och lägga till "onlineföretagare" till listan över möjliga efterskolor och sommarjobb som finns tillgängliga för barn idag. Spelskapande Ett område där digitalt ...

Redaktörens val

Word 2007 Mail Merge - Steg 3: Byggnadsrekord - dummies

Word 2007 Mail Merge - Steg 3: Byggnadsrekord - dummies

Efter att ha definierat de fält du behöver för din Word 2007-postfusion, är nästa steg att slutföra adresslistan. För att göra det skapar du en lista över poster genom att ange data för varje fält i varje post. Detta händer i dialogrutan Ny adresslista. Kom ihåg att fält är kolumner och ...

Word 2007 Mail Merge - Steg 5: Final Merge - dummies

Word 2007 Mail Merge - Steg 5: Final Merge - dummies

Med sammanfogningsfälten infogad i huvudversionen av Word 2007-dokumentet och adresslistan stannar, är du redo att starta din mailfusion! Spara huvuddokumentet. Klicka på knappen Förhandsgranska resultat. Fälten i huvuddokumentet försvinner! De ersätts av information från den första posten i adresslistan. Så här ...