Ich habe mich immer gefragt, warum wir codieren
virtual void MyFunction() = 0;
und nicht
pure virtual void MyFunction();
Gibt es eine Referenz für die Grundlage dieser Entscheidung?
Ich habe mich immer gefragt, warum wir codieren
virtual void MyFunction() = 0;
und nicht
pure virtual void MyFunction();
Gibt es eine Referenz für die Grundlage dieser Entscheidung?
Antworten:
Aus dem Design und der Entwicklung von C ++ - Bjarne Stroustrup - Addison-Wesley (ISBN 0-201-54330-3) - Kapitel 13.2.3:
Die merkwürdige
= 0
Syntax wurde der offensichtlichen Alternative der Einführung eines neuen Schlüsselworts vorgezogen,pure
oderabstract
weil ich zu diesem Zeitpunkt keine Chance sah, ein neues Schlüsselwort zu akzeptieren. Hätte ich vorgeschlagenpure
, hätte Release 2.0 ohne abstrakte Klassen ausgeliefert. Da ich zwischen einer besseren Syntax und abstrakten Klassen wählen konnte, entschied ich mich für abstrakte Klassen. Anstatt eine Verzögerung zu riskieren und bestimmte Kämpfe zu führenpure
, habe ich die traditionelle C- und C ++ - Konvention verwendet, 0 zu verwenden, um nicht dort zu repräsentieren .
In jedem Fall wird der C ++ - Standard (§ 9.2 - Klassenmitglieder) = 0
als reiner Bezeichner bezeichnet .
pure
einen Kontext Schlüsselwort , das Sie am Ende einer Funktionsdefinition setzen, so virtual void MyFunction() pure
statt = 0
, zu gehen zusammen mit final
und override
.