Обнулить объявление виртуальной функции? [дубликат]

6
задан Community 23 May 2017 в 12:07
поделиться

8 ответов

Это чистая виртуальная функция . Это делает так, что вы ДОЛЖНЫ создать класс (и реализовать указанную функцию), чтобы использовать его.

12
ответ дан 8 December 2019 в 15:58
поделиться

На жаргоне C ++ это называется чистой виртуальной функцией-членом. Как вы уже догадались, это означает, что функция не определена внутри класса, а должна быть реализована в производных классах. Вы не можете создавать экземпляры классов с помощью чистых виртуальных функций-членов, чистые виртуальные функции в основном ведут себя как абстрактные методы в Java или C #.

2
ответ дан 8 December 2019 в 15:58
поделиться

Это означает, что это чисто виртуальный метод, то есть подклассы должны реализовывать метод самостоятельно. Для этого метода все еще может быть реализация, но классы с чистыми виртуальными методами не могут быть созданы, что делает это похожим на ключевое слово abstract, встречающееся в различных других языках.

1
ответ дан 8 December 2019 в 15:58
поделиться

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

0
ответ дан 8 December 2019 в 15:58
поделиться

Метод SetValue является чисто виртуальным. Его класс не предоставляет реализацию этого метода и не может быть инстанцирован (поэтому мы называем его абстрактным). Конкретные производные классы, с другой стороны, должны предоставлять реализацию таких методов. См. подробнее здесь.

0
ответ дан 8 December 2019 в 15:58
поделиться

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

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

0
ответ дан 8 December 2019 в 15:58
поделиться

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

Чистая виртуальная функция-член указывает, что функция-член будет существовать для каждого объекта конкретного производного класса, даже если функция-член (обычно) не определена в базовом классе.

Это связано с тем, что синтаксис для определения чистой виртуальной функции-члена заставляет производные классы реализовывать функцию-член, если производные классы намереваются быть созданы (то есть, если они намереваются быть конкретными).

В вашем случае все объекты классов, производных от базового класса, будут иметь функцию-член SetValue (). Однако, поскольку базовый класс является абстрактным понятием, он не содержит достаточно информации для реализации SetValue ().

Представьте, что «= 0» - это все равно, что сказать «код этой функции находится в указателе NULL».

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

0
ответ дан 8 December 2019 в 15:58
поделиться

Это означает, что класс является абстрактным, и не может создать свой объект. Его можно использовать как базовый класс для другого.
Чистый виртуальный класс также используется в c ++ в качестве интерфейса , известного из языка вроде java , но, конечно, он другой.

0
ответ дан 8 December 2019 в 15:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: