Eu sempre me perguntei por que codificamos
virtual void MyFunction() = 0;
e não
pure virtual void MyFunction();
Existe uma referência para a base desta decisão?
Eu sempre me perguntei por que codificamos
virtual void MyFunction() = 0;
e não
pure virtual void MyFunction();
Existe uma referência para a base desta decisão?
Respostas:
De Design e evolução de C ++ - Bjarne Stroustrup - Addison-Wesley (ISBN 0-201-54330-3) - capítulo 13.2.3:
A
= 0
sintaxe curiosa foi escolhida em detrimento da alternativa óbvia de introduzir uma nova palavrapure
- chave ouabstract
porque, na época, eu não via chance de obter uma nova palavra-chave aceita. Se eu sugerissepure
, o Release 2.0 seria enviado sem classes abstratas. Dada a escolha entre uma sintaxe mais agradável e as classes abstratas, eu escolhi as classes abstratas. Em vez de arriscar atrasar e incorrer em certas brigaspure
, usei a tradição C e C ++ de usar 0 para representar não lá .
De qualquer forma, observar o padrão C ++ (§ 9.2 - Membros da classe) = 0
é chamado de puro especificador .
pure
uma palavra-chave contextual que você colocou no final de uma definição de função, portanto, em virtual void MyFunction() pure
vez de = 0
, ir junto com final
e override
.