67356

Перевантаження шаблонної функції

Лекция

Информатика, кибернетика и программирование

Окрім створення безпосередньо перевизначених версій узагальненої функції, можна також перевизначати саму специфікацію шаблону функції. Для цього достатньо створити ще одну версію шаблону, яка відрізнятиметься від інших переліком параметрів. Розглянемо такий приклад...

Украинкский

2014-09-07

70 KB

1 чел.

Лекція № 20

Тема: Перевантаження шаблонної функції

План

  1.  Механізм перевантаження специфікації шаблону функції
  2.  Використання стандартних параметрів у шаблонних функціях
  3.  Обмеження, які застосовуються при використанні узагальнених функцій
  4.  Приклад створення узагальненої функції abs()

  1.   Механізм перевантаження специфікації шаблону функції

   Окрім створення безпосередньо перевизначених версій узагальненої функції, можна також перевизначати саму специфікацію шаблону функції. Для цього достатньо створити ще одну версію шаблону, яка відрізнятиметься від інших переліком параметрів. Розглянемо такий приклад.

Приклад. Демонстрація механізму перевизначення специфікації шаблону функції

    // Перша версія шаблону Fun().

template <class aType> void Fun(aType a)

{     cout << "Виконується функція Fun(aType a)" << endl;

}

    // Друга версія шаблону Fun().

template <class aType, class bType> void Fun(aType a, bType b)

{     cout << "Виконується функція Fun(aType a, bType b)" << endl;

}

void main()

{     Fun(10);            // Викликається функція Fun(a).

      Fun(10, 20);           // Викликається функція Fun(a, b).

}

   У цьому коді програми шаблон для функції Fun() перевизначається, щоб забезпечити можливість прийняття як одного, так і двох параметрів.

  1.   Використання стандартних параметрів у шаблонних функціях

   У шаблонних функціях можна змішувати стандартні параметри з узагальненими параметрами типу. Ці параметри працюють так само, як і у будь-якій іншій функції. Розглянемо такий приклад.

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

                 функції

   // Відображення даних задану кількість разів.

template<class aType> void repeat(aType data, int times)

{    int tim = times;

     do

     {     cout << tim – times + 1 << " ==> " << data << endl;

            times--;

      } while(times);

      cout << endl;

}

void main()

{    repeat("Це тест.", 3);

     repeat(100, 5);

     repeat(99.0/2, 4);

}

    Ось які результати генерує ця програма.

1 ==> Це тест.

2 ==> Це тест.

3 ==> Це тест.

1 ==> 100

2 ==> 100

3 ==> 100

4 ==> 100

5 ==> 100

1 ==> 49.5

2 ==> 49.5

3 ==> 49.5

4 ==> 49.5

 

    У цьому коді програми функція repeat() відображає свій перший аргумент стільки раз, скільки задано її другим аргументом. Оскільки перший аргумент має узагальнений тип, то функцію repeat() можна використовувати для відображення даних будь-якого типу. Параметр times – стандартний, він передається за значенням. Змішане задавання узагальнених і стандартних параметрів, як правило, не викликає жодних проблем їх реалізації, застосовується найчастіше у програмуванні.

  1.   Обмеження, які застосовуються при використанні узагальнених функцій

    Узагальнені функції подібні до перевизначених функцій, але мають більше обмежень з їх застосування. При перевизначенні функцій в тілі кожної з них зазвичай записують різні дії. Але узагальнена функція повинна виконувати одні і ті самі дії для всіх її версій; відмінність між версіями полягає тільки в типі оброблюваних даних. Розглянемо приклад, у якому перевизначені функції не можна замінити узагальненою функцією, оскільки вони виконують різні дії:

void outdata(int i)

{    cout << i << endl;

}

void outdata(double d)

{    cout << d * 3.1416 << endl;

}

  1.   Приклад створення узагальненої функції abs()

    Функція abs() -  функція, яка повертає абсолютне значення заданого аргументу. Оскільки процедура повернення абсолютного значення числа однакова для всіх типів числових значень, то функція abs() може слугувати типовим прикладом для створення шаблонної функції.

    За наявності узагальненої версії функції abs() компілятор зможе автоматично створювати необхідну її версію. Програміст у цьому випадку звільняється від написання окремих версій для кожного типу даних.

    

Приклад. Демонстрація механізму створення узагальненої версії функції, яка повертає  

                 абсолютне значення числа

 

template <class aType> aType myAbs(aType n)

{    return n < 0 ? -n : n;

}

void main()

{    cout << myAbs(-10) << endl;            // Для типу int

     cout << myAbs(-10.0) << endl;        // Для типу double

     cout << myAbs(-10L) << endl;         // Для типу long

     cout << myAbs(-10.0F) << endl;      // Для типу float

}

Головне тут те, що один і той самий алгоритм повинен застосовуватися до широкого діапазону типу даних.


 

А также другие работы, которые могут Вас заинтересовать

26024. Приоритеты. Понятия, определения, классификация 29.37 KB
  Если требование в процессе обслуживания может быть удалено из канала и возвращено в очередь либо вовсе покидает СМО при поступлении требования с более высоким приоритетом то система работает с абсолютным приоритетом. На систему обслуживания имеющую один канал обслуживания поступает пуассоновский поток заявок с интенсивностью λ. Время обслуживания заявки τ случайная величина распределенная по показательному закону с параметром . Окончание обслуживания можно рассматривать как появление на выходе системы обслуженной заявки.
26025. Тензометрия 246 KB
  Тензометрия (от лат tensus — напряжённый и греч. metron — мера) — способ измерения напряжённо-деформированного состояния конструкции. Базируется на определении напряжений и деформаций в наружных слоях детали. Прибор для измерения этих параметров называется тензометром; обычно основным элементом такого прибора является тензодатчик
26026. Основные направления реформы государственной службы Российской Федерации 42.5 KB
  Под реформой государственной службы ГС следует понимать осуществление целенаправленных преобразований результатом которых является постепенное формирование новой системы ГС либо появление у существующей системы новых качеств черт или существенных признаков. N 261 федеральная программа Реформированиеи развитие системы государственной службыРоссийской Федерации 2009 2013 годы Государственные заказчики мероприятий Программы: Министерство экономического развития Российской Федерации Министерство внутренних дел Российской Федерации...
26027. Федеральный закон «О системе государственной службы Российской Федерации»: общая характеристика и значение 64 KB
  N 25ФЗ О муниципальной службе в РФ Глава 4. На муниципальную службу вправе поступать граждане достигшие возраста 18 лет владеющие государственным языком Российской Федерации и соответствующие квалификационным требованиям установленным в соответствии с настоящим Федеральным законом для замещения должностей муниципальной службы при отсутствии обстоятельств указанных в статье 13 настоящего Федерального закона в качестве ограничений связанных с муниципальной службой. При поступлении на муниципальную службу гражданин представляет: 1...
26028. Понятие и значение государственной гражданской службы 50 KB
  Понятие и значение государственной гражданской службы. Федеральный закон О системе государственной службы Российской Федерации определяет государственную службу как профессиональную служебную деятельность граждан РФ по обеспечению исполнения полномочий: Российской Федерации и ее субъектов; федеральных органов государственной власти иных федеральных государственных органов федеральных государственных органов и органов государственной власти субъектов РФ иных государственных органов субъектов РФ государственных органов субъектов РФ;...
26029. Поступления на государственную гражданскую службу 45.5 KB
  21 Одним из принципов государственной гражданской службы является равный доступ граждан владеющих государственным языком Российской Федерации к гражданской службе и равные условия ее прохождения независимо от пола расы национальности происхождения имущественного и должностного положения места жительства отношения к религии убеждений принадлежности к общественным объединениям а также от других обстоятельств не связанных с профессиональными и деловыми качествами гражданского служащего. На гражданскую службу вправе поступать граждане...
26030. Должности государственной гражданской службы, их группы и категории 60 KB
  Должности государственной гражданской службы их группы и категории. Должности федеральной государственной гражданской службы учреждаются федеральным законом или указом Президента Российской Федерации в целях обеспечения исполнения полномочий государственного органа либо лица замещающего государственную должность. статьи 89 должности государственной гражданской службы подразделяются на четыре категории и пять групп. Должности государственной гражданской службы подразделяются на следующие группы: высшие должности; главные должности; ведущие...
26031. Служебный контракт на государственной гражданской службе: понятие, содержание и значение 66 KB
  Согласно статьи 23 Служебный контракт соглашение между представителем нанимателя и гражданином поступающим на гражданскую службу или гражданским служащим о прохождении гражданской службы и замещении должности гражданской службы. Представитель нанимателя обязуется предоставить гражданину поступающему на гражданскую службу возможность прохождения гражданской службы а также предоставить указанному гражданину или гражданскому служащему возможность замещения определенной должности гражданской службы обеспечить им прохождение гражданской...
26032. Должностной регламент государственного гражданского служащего 51 KB
  В должностной регламент включаются: 1 квалификационные требования к уровню и характеру знаний и навыков предъявляемые к гражданскому служащему замещающему соответствующую должность гражданской службы а также к образованию стажу гражданской службы государственной службы иных видов или стажу опыту работы по специальности; 2 должностные обязанности права и ответственность гражданского служащего за неисполнение ненадлежащее исполнение должностных обязанностей в соответствии с административным регламентом государственного органа...