2016-07-22 3 views
2

Я недавно искал исходный код игры. В проекте объявляется «абстрактный» класс сцены, из которого наследуются другие типы сцен, такие как PlayScene для MenuScene. Класс Scene объявляется в заголовке со всеми его методами как виртуальными. Однако, изучив исходный код для этого класса, все эти методы реализованы как пустые тела. Это просто плохой код или есть какая-то причина, почему нельзя было бы объявлять эти методы как виртуальные?В чем разница между виртуальным методом с пустым телом и чистым виртуальным методом?

ответ

4

Чистый виртуальный метод сделает ваш класс «абстрактным», и поэтому вы не сможете его создать. Пустой виртуальный метод позволит создать экземпляр вашего класса.

Это просто плохой код или есть какая-то причина, почему нельзя было бы объявить эти методы чистым виртуальным?

Не знаю, это звучит как плохой код. Если вы не хотите, чтобы ваш базовый класс предоставлял «нулевые» методы при унаследовании, что не является необычной практикой, когда эти методы предназначены как поведенческие расширения.

Другими словами, если ваша семантика «расширяет этот класс и перегружает только те функции, которые вам действительно нужны», тогда это совершенно нормально. Это часто используется, когда эти методы рассматриваются как крючки и вызываются в определенные моменты каркасом.

+0

Почему вы хотите создать экземпляр класса без каких-либо функциональных возможностей? – FlipFlop

+0

@FlipFlop Это, вероятно, только побочный эффект. – Shoe

+0

@FlipFlop, чтобы впоследствии вы могли заменить его на тот, который наследует его, но на самом деле делает вещи, переопределяя некоторые из функций. – Quentin

Смежные вопросы