Подтвердить что ты не робот

Что значит установить объявление функции, равную 0? Как назначить целое число функции?

Я просматривал источники (предпочитаю не упоминать) GUI Toolkit, который завершил работу с API Windows, когда я нашел следующее определение функции в классе окна:

 virtual LRESULT CALLBACK wndProc (HWND, UINT, WPARAM, LPARAM) = 0;

Что здесь происходит? Как назначить функцию целому числу? Или он назначает его NULL? Вам нужно сделать это, если вы хотите использовать указатели функций в wndproc?

4b9b3361

Ответ 1

Эта строка кода определяет чистую виртуальную функцию в С++. Это не имеет никакого отношения к иначе сложному API Win32 API или GUI вообще.

Чистая виртуальная функция - это виртуальная функция, которая используется, когда разработчик класса хочет заставить производные классы переопределить функцию и обеспечить собственную реализацию.

Если класс содержит любые чистые виртуальные функции, он считается "абстрактным" классом, и экземпляры этого класса не могут быть созданы.

С++ использует специальный синтаксис = 0; для указания чистых виртуальных функций вместо добавления нового ключевого слова на язык (например, языки С#). Вы можете думать об этом как о том, как установить указатель на 0.

Также см. ответы на этот связанный вопрос: Каковы преимущества использования чистых виртуальных функций в С++?


(Кстати, заголовочные файлы Windows < windows.h > просто определяют NULL как 0. Таким образом, программист технически мог написать = NULL, но гораздо яснее использовать числовую константу 0 и зарезервировать NULL для значения указателя.)

Ответ 2

Это чистая виртуальная функция.

=0 - это просто синтаксис, используемый для указания, что это чистая виртуальная функция.

Присутствие чистой виртуальной функции в классе делает класс абстрактным классом. Нельзя создать объект любого абстрактного класса. Хотя, может быть создан указатель или ссылка на такой абстрактный класс. Ваш производный класс должен переопределить этот метод.

Какова цель создания функции pure virtual?

Как правило, функция сделана чистой виртуальной, так что разработчик абстрактного базового класса может заставить производный класс переопределить эту функцию и обеспечить ее собственную реализацию. Важно отметить, однако, что чистая виртуальная функция может иметь собственную реализацию, поэтому производный класс может вызывать версию функции Base класса.

Иногда добавляется чистая виртуальная функция, чтобы сделать базовый класс Abstract (Так что экземпляры не могут быть созданы). Как правило, в такой ситуации вместо добавления фиктивной функции для создания класса Аннотация деструктор класса становится чистым виртуальным.

Ответ 3

Это функция pure virtual", которую необходимо переопределить в производном классе.