Глава №13. Итоговый тест

  Юрий Ворон  | 

    | 

  Обновлено 23 Ноя 2018  | 

 382

Еще одна глава позади. Пора закрепить пройденный материал.

Теория

Шаблоны позволяют написать одну версию функции или класса, которая будет работать с разными типами данных. Функция или класс, реализована через шаблон, с фактическим (одним) типом данных называется экземпляром.

Все шаблоны функций или классов должны начинаться с ключевого слова template и объявления параметров шаблона. В объявлении параметров шаблона указываются параметры типа и параметры non-type. Параметр типа шаблона — это параметр, который отвечает за типы данных, с которыми будет работать шаблон, обычно его называют T, T1, T2 или другими (одиночными) буквами (например, S). Параметром non–type может быть переменная интегрального типа данных (char, bool, int, long, short), указатель/ссылка на функцию или на метод/объект класса, std::nullptr_t.

Разделение определения шаблонов класса и его методов по разным файлам не работает как с обычными классами — вы не можете поместить определение шаблона класса в заголовочный файл, а определение шаблонов методов этого класса в отдельный файл .cpp. Как правило, лучше всё хранить в заголовочном файле с определениями шаблонов методов под классом.



Явная специализация шаблона используется для определения реализации, отличной от общей, функции или класса при работе с определенным типом данных. Если все параметры специализации шаблона явно определены, то это полная специализация. Классы также поддерживают частичную специализацию, при которой не все параметры шаблона должны быть явно определены. В C++14 частичная специализация шаблонов функций запрещена.

Многие классы в стандартной библиотеке C++ используют шаблоны, такие как std::array и std::vector. Шаблоны часто используются для реализации контейнерных классов, которые можно один раз написать и использовать с любыми типами данных.

Тест

Задание №1

Предположим, нам нужно передавать данные парами. Реализуйте шаблон класса Pair1, который позволяет пользователю передавать данные одного типа парами. Следующий код:

должен производить следующий результат:

Pair: 6 9
Pair: 3.4 7.8

Ответ №1

Задание №2

Реализуйте класс Pair, который позволяет пользователю использовать разные типы данных в передаваемых парах.

Следующий код:

должен производить следующий результат:

Pair: 6 7.8
Pair: 3.4 5

Подсказка: Для определения шаблона с использованием двух разных типов, просто разделите параметры типа шаблона запятой.

Ответ №2

Задание №3

Напишите шаблон класса StringValuePair, в котором первое значение всегда является типа string, а второе — может быть любого типа. Этот шаблон класса должен наследовать частично специализированный класс Pair (в котором первый параметр — std::string, а второй – «любой тип данных»).

Следующий код:

должен производить следующий результат:



Pair: Amazing 7

Подсказка: При вызове конструктора класса Pair из конструктора класса StringValuePair, не забудьте указать, что параметры относятся к классу Pair.

Ответ №3

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (5 оценок, среднее: 5,00 из 5)
Загрузка...

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *