Какая разница между абстрактным классом и чистым абстрактным классом в C ++?

Пример:

Итераторы — это чистые абстракции: все, что ведет себя как
итератор является итератором.

Что это значит?

10

Решение

абстрактный класс имеет хотя бы одну чисто виртуальную функцию. Это стандартная терминология C ++.

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

Теперь к вашему актуальному вопросу:

Итераторы — это чистые абстракции: все, что ведет себя как итератор, является итератором.

Это не имеет ничего общего с абстрактными классами (чистыми или нет). Все, что он говорит, — то, что все, что выполняет контракт итератора, является итератором. Это даже не должен быть класс (подумайте, указатели).

26

Другие решения

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

13

Я думаю, что чистый абстрактный класс — это C ++-эквивалент интерфейса.

Увидеть Вот:

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

5

Абстрактный класс — это класс с некоторыми функциональными возможностями, но некоторые из них должны быть реализованы, тогда как чистый абстрактный класс не имеет никакой реализованной функциональности.

Это немного похоже на интерфейс в других языках, таких как C # и Java.

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

5

Абстрактный класс * по крайней мере будет иметь одну чисто виртуальную функцию и может иметь элементы данных.

Чисто абстрактный класс это как интерфейс. Здесь могут быть определены только чисто виртуальные функции. Никакие члены данных или определение метода не могут быть сделаны здесь.

Для получения дополнительной информации посетите: (https://en.wikibooks.org/wiki/C%2B%2B_Programming/Classes/Abstract_Classes/Pure_Abstract_Classes)

1

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

0

В вашем примере вы говорите о итераторы. В C ++, а точнее в стандартной библиотеке, термин итераторы не относится к чисто абстрактному классу, но к тому, что называется концепции. Понятия используются с шаблонами, а не с виртуальным полиморфизмом, основанным на наследовании. В настоящее время (C ++ 11) концепции определяются только в документации библиотеки, то есть они (пока) не существуют как часть самого языка C ++. Стандартные библиотеки документируют концепции, например концепцию «Итератор», как набор требования для любого типа / объекта, который будет принят в качестве параметра типа шаблона, который хочет работать с «Итератором». Набор требований определяется с точки зрения того, какие выражения являются действительными для объекта, независимо от его типа. Это форма утки. Например, см .: http://en.cppreference.com/w/cpp/concept/Iterator

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector