Zawsze zastanawiałem się, dlaczego kodujemy
virtual void MyFunction() = 0;
i nie
pure virtual void MyFunction();
Czy istnieje odniesienie do podstawy tej decyzji?
Zawsze zastanawiałem się, dlaczego kodujemy
virtual void MyFunction() = 0;
i nie
pure virtual void MyFunction();
Czy istnieje odniesienie do podstawy tej decyzji?
Odpowiedzi:
Od projektowania i ewolucji C ++ - Bjarne Stroustrup - Addison-Wesley (ISBN 0-201-54330-3) - rozdział 13.2.3:
Dziwna
= 0
składnia została wybrana zamiast oczywistej alternatywy wprowadzenia nowego słowa kluczowegopure
lubabstract
dlatego, że w tym czasie nie widziałem szansy na zaakceptowanie nowego słowa kluczowego. Gdybym zasugerowałpure
, wersja 2.0 zostałaby dostarczona bez abstrakcyjnych klas. Mając wybór między ładniejszą składnią a klasami abstrakcyjnymi, wybrałem klasy abstrakcyjne. Zamiast ryzykować opóźnienie i ponoszenia pewnych walk nadpure
użyłem tradycji C i C ++ konwencję za pomocą 0 do reprezentowania nie istnieje .
W każdym razie patrzenie na standard C ++ (§ 9.2 - Członkowie klasy) = 0
nazywa się czysto specyfikatorem .
pure
kontekstowe słowa kluczowego można umieścić na końcu definicji funkcji, więc virtual void MyFunction() pure
zamiast = 0
, aby przejść wraz z final
a override
.