Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Зачем перегружают функции. Как компилятор определяет какую из перегруженных функций вызывают.Содержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Ф-ции перегружают, чтобы можно было выполнять одинаковые задачи для разных типов и при этом использовать только 1 имя ф-ции. Компилятор различает ф-ции не только по имени, а ещё и по входным данным, так что перегруженные ф-ции для него вроде являются разными. Если конечно не возникает неоднозначностей. Пример: struct Distance { int feet; float inches; }; void engldisp(Distance); //прототипы void engldisp(float); int main(){ …} void engldisp(Distance dd) //параметр dd типа Distance { cout << dd/feet << “\’-“ << “\”; } void engldisp(floar dd) //параметр dd типа float { int feet = static_cast<int>(dd/12); float inches = dd – feet*12; cout << feet << “\’-“ << inches << “\”; } Как определяется шаблон функции? Опишите процесс конкретизации шаблона. Что есть явная специализация шаблона? Шаблоны позволяют использовать одни и те же функции или классы для обработки разных типов данных. template <class Type> Type min2(Type a, Type b) { return a < b? a: b; } Конкретизация Шаблон функции описывает, как следует строить конкретные функции, если задано множество фактических типов или значений. Процесс конструирования называется конкретизацией шаблона. Выполняется он неявно, как побочный эффект вызова или взятия адреса шаблона функции. Например, в следующей программе min() конкретизируется дважды: один раз для массива из пяти элементов типа int, а другой – для массива из шести элементов типа double: массива из шести элементов типа double: // определение шаблона функции min() // с параметром-типом Type и параметром-константой size template <typename Type, int size> Type min(Type (&r_array)[size]) { Type min_val = r_array[0]; for (int i = 1; i < size; ++i) if (r_array[i] < min_val) min_val = r_array[i]; return min_val;} // size не задан -- ok // size = число элементов в списке инициализации int ia[] = { 10, 7, 14, 3, 25 }; double da[6] = { 10.2, 7.1, 14.5, 3.2, 25.0, 16.8 }; #include <iostream> int main() { // конкретизация min() для массива из 5 элементов типа int // подставляется Type => int, size => 5 int i = min(ia); if (i!= 3) cout << "??oops: integer min() failed\n"; else cout << "!!ok: integer min() worked\n"; // конкретизация min() для массива из 6 элементов типа double // подставляется Type => double, size => 6 double d = min(da); if (d!= 3.2) cout << "??oops: double min() failed\n"; else cout << "!!ok: double min() worked\n"; return 0;} Вызов int i = min(ia); приводит к конкретизации следующего экземпляра функции min(), в котором Type заменено на int, а size на 5: int min(int (&r_array)[5]) { int min_val = r_array[0]; for (int i = 1; i < 5; ++i) if (r_array[i] < min_val) min_val = r_array[i]; return min_val;} Аналогично вызов double d = min(da); конкретизирует экземпляр min(), в котором Type заменено на double, а size на 6. Явное определение специализации – это такое определение, в котором за ключевым словом template следует пара угловых скобок <>, а за ними – определение специализированного шаблона. Здесь указывается имя шаблона, аргументы, для которых он специализируется, список параметров функции и ее тело. #include <cstring> // явная специализация для const char*: имеет приоритет над конкретизацией шаблона по обобщенному определению typedef const char *PCC; template<> PCC max< PCC >(PCC s1, PCC s2) { return (strcmp(s1, s2) > 0? s1: s2); ИЛИ template <class Ttype> тип имя_функции(список_параметров) {тело_функции} Когда компилятор создает конкретную версию этой ф-ии (вместо Ttype подставляет нужный тип) создается ее конкретизация. Явная специализация шаблона-вручную перегруженная версия шаблона Укажите особенности функции main. Программа должны содержать ровно 1 ф-цию main. Выполнение программы начинается с вызова main и заканчивается после выхода из main. main может возвращать int (код ошибки) или void. Также в main можно передать параметры из командной строки: int main(int argc, char *argv[]) argc – кол-во строкargv – массив строк
|
||||
Последнее изменение этой страницы: 2016-12-30; просмотров: 413; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.16.82.195 (0.006 с.) |