Справочник от Автор24
Поделись лекцией за скидку на Автор24

Методы и стандарты программирования

  • 👀 917 просмотров
  • 📌 858 загрузок
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Методы и стандарты программирования» pdf
Методы и стандарты программирования • Шаблонные функции • Шаблонные классы Шаблонные функции. Основные понятия Шаблонная функция с одним обобщённым типом  Шаблонная функция (обобщенная функция, template function) определяет общий набор операций, которые предназначены для применения к данным различных типов. Шаблонная функция перегружает сама себя  Здесь обобщённый тип Ttype – заполнитель (placeholder) для типа данных, обрабатываемых функцией. При определении функции и в её параметрах вместо «перегружаемого» типа используется Ttype  При вызове шаблонной функции, компилятор создает версию этой функции для конкретного типа, т.е. создается ее специализация (конкретизация, порожденная функция (generated function). При этом вместо плэйсхолдера подставляется необходимый тип  Действие порождения функции определяют как ее реализацию (instantiating) Шаблонная функция с двумя обобщёнными типами Шаблонные функции. Компиляция    Сама по себе шаблонная функция не является ни функцией, ни типом. Если не была создана хотя бы одна специализация (т.е. никак не были определены шаблонные типы), она и вовсе не компилируется, т.е. никак не отображается из исходного кода в объектный код Использование шаблонов может замедлять компиляцию, но не выполнение Можно проверить данный факт с помощью утилиты nm, которая выводит таблицу символов объектного файла. Таблица символов – структура данных, содержащаяся в объектном файле, которая сопоставляет имена символов из исходного кода с их бинарным кодом. Если бинарного кода для функции нет в объектном файле, nm не покажет её имя g++ -c main.cpp –o main.o nm main.o Шаблонные функции. Вывод типа  Как правило, при инстанциировании шаблонной функции компилятор может сам вывести шаблонный тип исходя из типов переданных данной функции параметров (type deduction). Благодаря этому возможны такие конструкции, как std::cout << “Hello World!”  В некоторых случаях компилятор не способен самостоятельно вывести тип. Например:  • У шаблонной функции нет параметров • Параметрам одного и ого же шаблонного типа переданы значения разных типов (например, int и long) • Необходимо «навязать» параметрам преобразование типов В таком случае при вызове шаблонной функции необходимо задать тип в явном виде в треугольных скобках после имени функции Шаблонные функции. Явная специализация  Если необходимо определить отдельную реализацию шаблонной функции для некоторых типов, можно переопределить такую функцию вручную. Это явная специалиазция шаблона (implicit specialization)  Вариант 1 Вариант 2 Варианты синтаксиса явной специализации (1) и (2) равнозначны, однако (2) часто считается более препочтительным, поскольку он в явной форме показывает, что данная функция является специализацией шаблона Шаблонные классы Объявление класса  Шаблонные классы объявляются аналогично шаблонным функциям  Структуры данных из STL (std::vector, std::queue и др) – шаблонные классы  Бинарный код для шаблонных классов, так же как и для шаблонных функций, генерируется только при создании специализации. При компиляции .cpp файла, в котором создаётся специализация, компилятор «не помнит» о том, что он «видел» при компиляции другого .cpp файла, где определены функции-члены класса  Два варианта решения проблемы: Создание объекта  1) Функции-члены шаблонного класса должны быть определены в заголовочном файле  2) Поместить в .cpp файл явную специализацию для необходимого типа: template class Foo; Шаблонны. Формальные параметры Параметры-типы   Шаблонные классы и функции могут иметь типы по умолчанию.  Если формальный параметр шаблона имеет значение по умолчанию, то все следующие за ним параметры также должны иметь значения по умолчанию. При создании объекта шаблонного класса с использованием типа по умолчанию необходимо добавить «<>» после имени класса, чтобы указать компилятору, что к данный класс является шаблонным. Параметры-значения  Шаблоны могут принимать параметры-значения (только целочисленных типов, перечисления (enum), указатели и nullptr, lvalue-ссылки). В этом случае шаблон производит вычисления с данным значением во время компиляции. Шаблонны. Формальные параметры Параметры-шаблоны  Позволяют параметризовать один шаблон другим шаблоном  Тоже могут быть заданы по умолчанию Шаблонный класс с одним типовым формальным параметром и одним шаблонным формальным параметром со значением по умолчанию
«Методы и стандарты программирования» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot