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

}

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


 

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

35001. Проблема неравенства доходов. Кривая Лоренца 32 KB
  На потребительском рынке это неравенство возможностей проявляется в неравной платежеспособности покупателей в основе которой лежит неравенство доходов. Очевидно что при равном распределении доходов какими бы благими намерениями оно ни оправдывалось в обществе не будут производить предметы роскоши ибо их некому будет купить. И наоборот в обществе с неравным распределением доходов выпускаемая продукция и оказываемые услуги будут значительнее разнообразнее а структура потребления разных доходных групп будет существенно различаться.
35003. Сущность заработной платы и ее формы 22.5 KB
  Коротко можно определить зарплату как цену уплачиваемую за единицу времени услуг труда. По мере развития общества растет и та часть общественного богатства которая затрачивается на оплату труда работников в рынок труда в конечном счете определяет дифференциацию заработной платы различных категорий работников. Верхняя граница зарплаты определяется темпами роста производительности труда.
35004. Необходимость, государственного регулирования экономики 26 KB
  Государство выправляя известное несовершенство рыночной системы берет на себя организацию предложения центральных денег и в обозримом будущем без государственной помощи не обойтись. Взаимодействия участников системы свободного предпринимательства многообразны по формам и социальным последствиям. Здесь основной задачей государства является создание правовой базы и общественной атмосферы для поддержания и облегчения функционирования рыночной системы перераспределение дохода н богатства и стабилизация экономики.
35005. Экономические функции, государства 31 KB
  Государство берет на себя задачу обеспечения правовой базою и некоторых важнейших услуг являющихся предпосылкой эффективного функционирования рыночной экономики. Государство устанавливает также законные правила игры регулирующие отношения между предприятиями поставщиками ресурсов и потребителями. Основные услуги обеспечиваемые государством включают применение полицейских сил для поддержания общественного порядка введение стандартов измерения веса и качества продуктов создание денежной системы облегчающей Обмен товаров и услуг....
35006. Методы воздействия государства на экономику 29.5 KB
  Государственное регулирование это форма целенаправленного воздействия государства на функционирующую экономическую систему с целью обеспечения пли поддержания определенных процессов изменений экономических явлений или их связей. В развитых странах есть два пути сокращения государственных расходов: уменьшение расточительства государственных органов и сужение сферы деятельности государства. Другая форма денежнокредитных отношений активное участие государства в операциях на рынке ценных бумаг с целью регулирования количества обращающихся...
35007. Роль, макроэкономических показателей 33.5 KB
  В мире успешно функционирует система национальных счетов СНС приспособленная к условиям рыночной экономики. В тот период она была связана прежде всего с обслуживанием интересов органов государственного уиравления а сегодня СНС проникла во все сферы экономической и общественнополитической жизни общества. В феврале 1993 года на очередной сессии Статистической комиссии ООН в НьюЙорке была принята новая усовершенствованная СНС. В конце 1992 года Верховный Совет Российской Федерации одобрил государственную программу перехода...
35008. ВНП и его расчет по доходам и расходам 35.5 KB
  При расчете ВНП учитывается только рыночная стоимость конечных продуктов и исключается промежуточная продукция. Поскольку в стоимость конечных продуктов входят все уже имевшие место промежуточные сделки покупка покрышек ткани производителями конечной продукции то отдельный учет промежуточной продукции означал бы двойной счет и завышенную оценку ВНП. Следует подчеркнуть одну из особенностей ВНП: он измеряет стоимость продукции произведенной факторами производства находящимися в собственности граждан данной страны даже если они живут...
35009. ВНП 31.5 KB
  Различают индекс потребительских цен ИПЦ и индекс цен ВНП или дефлятор ВНП который отражает не только цены потребительских товаров и услуг но и инвестиционных товаров. Дефлятор ВНП помогает проводить корректировку объема ВНП за определенное время измерять рост его реального объема по сравнению с номинальным. Номинальный ВНП измеряется в текущих ценах реальный в постоянных базовых ценах.