2016-01-19 4 views
1

Я понимаю, что C++ library concept - это C++, какие интерфейсы, такие как Closeable, предназначены для Java (согласно связанному источнику, понятия: именованный набор требований).В чем разница между концепцией C++ и интерфейсом?

  1. Правильно ли это аналогия?
  2. В чем разница между Интерфейс C++ (т. Е. Класс с чистыми виртуальными методами) и концепция библиотеки C++?
  3. В целом, является реализация концепций библиотеки C++ через множественный эквивалент наследования реализации нескольких интерфейсов в Java (который не имеет множественного наследования)?
+0

«Библиотечные концепции» - это «именованные требования, используемые в нормативном тексте стандарта C++ для определения ожиданий стандартной библиотеки»; то есть они вообще не существуют в C++, а используются только для его определения. – molbdnilo

+0

Да, я имею в виду концепты библиотеки C++, а не концепции C++. – syntagma

ответ

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

  2. Интерфейс C++ - это класс. Реализация интерфейса означает наследование интерфейса и реализацию чистых виртуальных функций-членов. Концепция представляет собой набор требований. Соответствие концепции означает, что соответствующий класс соответствует всем требованиям. Могут быть требования для достоверности конкретных выражений (должен иметь псевдоним типа члена с именем iterator) или для поведения (i++ должен быть эквивалентен It ip=i; ++i; return ip;).

    Наследование интерфейсов может и должно быть определено на языке, но языковая поддержка формально не определена. Языковая поддержка была предложена, но не включена в текущий (C++ 14) стандарт.

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

  3. Не является эквивалентом. Динамический и статический полиморфизм - это совсем другое.

0
  1. Нет, это неправильно. Интерфейсы в Java такие же, как интерфейсы в C++ (класс, где каждый метод является виртуальным чистым).

  2. Концепция C++ описывает функции класса, а не интерфейс C++, определяет функциональные функции класса.

  3. Концепции C++ не имеют отношения к наследованию. Концепция определяет, что класс может делать, а не как класс должен реализовывать.

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