Что значит установить объявление функции равным 0?Как вы можете назначить целое число для функции? - PullRequest
42 голосов
/ 09 июля 2011

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

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

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

Ответы [ 3 ]

62 голосов
/ 09 июля 2011

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

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

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

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

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


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

8 голосов
/ 09 июля 2011

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

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

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

Какова цель сделать функцию чисто виртуальной?

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

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

5 голосов
/ 09 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...