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
= 0Syntax wurde der offensichtlichen Alternative der Einführung eines neuen Schlüsselworts vorgezogen,pureoderabstractweil 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) = 0als reiner Bezeichner bezeichnet .
pureeinen Kontext Schlüsselwort , das Sie am Ende einer Funktionsdefinition setzen, so virtual void MyFunction() purestatt = 0, zu gehen zusammen mit finalund override.