Я недавно искал исходный код игры. В проекте объявляется «абстрактный» класс сцены, из которого наследуются другие типы сцен, такие как PlayScene для MenuScene. Класс Scene объявляется в заголовке со всеми его методами как виртуальными. Однако, изучив исходный код для этого класса, все эти методы реализованы как пустые тела. Это просто плохой код или есть какая-то причина, почему нельзя было бы объявлять эти методы как виртуальные?В чем разница между виртуальным методом с пустым телом и чистым виртуальным методом?
ответ
Чистый виртуальный метод сделает ваш класс «абстрактным», и поэтому вы не сможете его создать. Пустой виртуальный метод позволит создать экземпляр вашего класса.
Это просто плохой код или есть какая-то причина, почему нельзя было бы объявить эти методы чистым виртуальным?
Не знаю, это звучит как плохой код. Если вы не хотите, чтобы ваш базовый класс предоставлял «нулевые» методы при унаследовании, что не является необычной практикой, когда эти методы предназначены как поведенческие расширения.
Другими словами, если ваша семантика «расширяет этот класс и перегружает только те функции, которые вам действительно нужны», тогда это совершенно нормально. Это часто используется, когда эти методы рассматриваются как крючки и вызываются в определенные моменты каркасом.
- 1. В чем разница между чистым виртуальным и виртуальным
- 2. шаблон класс с виртуальным методом
- 3. В чем разница между абстрактным и виртуальным?
- 4. Дизайн с (чистым) виртуальным C++
- 5. В чем разница между статическим методом и нестатическим методом?
- 6. В чем разница между методом расширения и статическим методом?
- 7. В чем разница между методом Java и родным методом?
- 8. разница между пустым типом возвращаемого методом
- 9. В чем разница между методом и полем?
- 10. В чем разница между методом и функцией?
- 11. В чем разница между Оператором и Методом?
- 12. В чем разница между методом и протоколом
- 13. В чем разница между свойством и методом?
- 14. В чем разница между алгоритмом и методом
- 15. Как принять предпочтение с виртуальным методом переопределения и наследования
- 16. Базовый класс с виртуальным методом и только реализуется условие
- 17. В чем разница между базовым адресом изображения, виртуальным адресом и относительным виртуальным адресом?
- 18. В чем разница между физическим драйвером и виртуальным драйвером?
- 19. В чем разница между «не виртуальным интерфейсом» и «абстрактным интерфейсом»?
- 20. В чем разница между размером и виртуальным размером изображений докеров?
- 21. В чем разница между сайтом и виртуальным каталогом
- 22. Разница между методом StringUtils и методом String
- 23. Разница между виртуальным адресом и физическим адресом
- 24. Разница между функцией и методом
- 25. Разница между виртуальным адресом и физическим адресом?
- 26. Как реализовать класс с виртуальным методом «на лету»
- 27. C++ от различных абстрактных баз с тем же чистым виртуальным методом
- 28. Создание потока boost с чистым виртуальным классом
- 29. Разница между функцией и методом?
- 30. разница между собственностью и методом
Почему вы хотите создать экземпляр класса без каких-либо функциональных возможностей? – FlipFlop
@FlipFlop Это, вероятно, только побочный эффект. – Shoe
@FlipFlop, чтобы впоследствии вы могли заменить его на тот, который наследует его, но на самом деле делает вещи, переопределяя некоторые из функций. – Quentin