
- •1) Системы счисления. Перевод чисел из одной системы счисления в другую
- •4) Арифметические выражения. Приемы, используемые для минимизации вычислений: вынесение общих множителей за скобки, использование дополнительных переменных
- •5) Ввод чисел с клавиатуры и вывод чисел в окно программы, формат ввода и вывода.
- •6) Средства разработки программ разветвляющейся структуры. Условные и безусловные операторы перехода.
- •8) Рекурсия. Использование рекурсии для вычисления числа Фибоначчи.
- •9) Уточнение корней уравнений: метод простых итераций, метод половинного деления, метод касательных.
- •10)Организация программ со структурой вложенных циклов. Транспонирование матриц
- •11)Массивы. Сохранение результатов вычислений в массиве.
- •12)Метод сортировки массива вставками.
- •13) Метод прямого обмена (метод пузырька) и его модификация.
- •14) Метод прямого выбора и его модификации: сортировка методом поиска минимального/максимального элемента, сортировка методом поиска индекса
- •15) Указатели
- •16) Матрицы. Обработка матриц. Многомерные статические массивы.
- •17) Массивы указателей. Динамические массивы. Операции new, new [], delete, delete [], malloc, free.
- •18) Программирование с использованием подпрограмм. Объявление функций. Глобальные переменные. Передача параметров. Передача массивов в качестве параметров.
- •19) Рекурсивные функции.
- •20) Перегружаемые функции, параметры со значениями по умолчанию, функции с переменным числом параметров.
- •21) Указатели на функции, передача указателей на функции в качестве параметров.
- •22) Классы. Конструктор и деструктор. Квалификаторы прав доступа. Указатель this.
- •23) Перегрузка стандартных операций. Наследование классов.
- •24) Открытое наследование, полиморфизм классов. Виртуальные функции и абстрактные классы.
- •25) Шаблоны функций и классов.
- •26)Наследование классов. Множественное наследование. Виртуальные классы.
- •Приложение. Полный код программы по транспонированию матрицы.
25) Шаблоны функций и классов.
Используя шаблоны, можно создавать обобщенные функции и классы. В обобщенной функции (или классе) обрабатываемый ею (им) тип данных задается как параметр. Таким образом, одну функцию или класс можно использовать для разных типов данных, не предоставляя явным образом конкретные версии для каждого типа данных. Рассмотрению обобщенных функций и обобщенных классов посвящена данная глава.
Обобщенная функция определяет общий набор операций, которые предназначены для применения к данным различных типов. Тип данных, обрабатываемых функцией, передается ей как параметр. Используя обобщенную функцию, к широкому диапазону данных можно применить единую общую процедуру. Возможно, вам известно, что многие алгоритмы имеют одинаковую логику для разных типов данных. Например, один и тот же алгоритм сортировки Quicksort применяется и к массиву целых чисел, и к массиву значений с плавающей точкой. Различие здесь состоит только в типе сортируемых данных. Создавая обобщенную функцию, можно определить природу алгоритма независимо от типа данных. После этого компилятор автоматически сгенерирует корректный код для типа данных, который в действительности используется при выполнении этой функции. По сути, создавая обобщенную функцию, вы создаете функцию, которая автоматически перегружает себя саму.
Обобщенная функция создается с помощью ключевого слова template. Обычное значение слова "template" точно отражает цель его применения в C++. Это ключевое слово используется для создания шаблона (или оболочки), который описывает действия, выполняемые функцией. Компилятору же остается "дополнить недостающие детали" в соответствии с заданным значением параметра.
Помимо обобщенных функций, можно также определить обобщенный класс. Для этого создается класс, в котором определяются все используемые им алгоритмы; при этом реальный тип обрабатываемых в нем данных будет задан как параметр при создании объектов этого класса.
Обобщенные классы особенно полезны в случае, когда в них используется логика, которую можно обобщить. Например, алгоритмы, которые поддерживают функционирование очереди целочисленных значений, также подходят и для очереди символов. Механизм, который обеспечивает поддержку связного списка почтовых адресов, также годится для поддержки связного списка, предназначенного для хранения данных о запчастях к автомобилям. После создания обобщенный класс сможет выполнять определенную программистом операцию (например, поддержку очереди или связного списка) для любого типа данных. Компилятор автоматически сгенерирует корректный тип объекта на основе типа, заданного при создании объекта.
Общий формат объявления обобщенного класса имеет следующий вид:
template <class Ttype> class имя_класса
обобщенные функции и классы представляют собой мощные средства, которые помогут увеличить эффективность работы программиста, поскольку они позволяют определить общий формат объекта, который можно затем использовать с любым типом данных. Обобщенные функции и классы избавляют вас от утомительного труда по созданию отдельных реализаций для каждого типа данных, подлежащих обработке единым алгоритмом. Эту работу сделает за вас компилятор: он автоматически создаст конкретные версии определенного вами класса.