68957

Перевантаження шаблонної функції та їх специфікацій

Лекция

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

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

Украинкский

2014-09-28

34 KB

2 чел.

Лекція № 19

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

План

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

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

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

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

#include <iostream>

using namespace std;

// Перша версія шаблонної функції f().

template <class X> void f(X а){

cout « "Усередині функції f(X а)\n";

}

// Друга версія шаблонної функції f().

template <class X, class Y> void f(X а, Y b){

cout << "Усередині функції f(X а, Y b)\n";

}

int main() {

f(10); // Виклик функції f(X).

f(10, 20); // Виклик функції f(X, Y).

return  0;

}

Тут шаблон функції f () переобтяжений для одного і двох параметрів.

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

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

// Застосування стандартних параметрів в шаблонній функції.

#include <iostream>

using namespace std;

const int TABWIDTH = 8;

// Виводить на екран дані у позиції tab.

template<class X> void tabOut(X data, int, tab){

for(; tab; tab--)

for(int i=0; i<TABWIDTH; i++) cout « '  ' ;

cout « data « "\n";

}

int main() {

tabOut("Перевірка", 0);

tabOut(100,   1);

tabOutCX',   2);

tabOut(10/3, 3);

return 0;

}

Програма виводить на екран наступні повідомлення.

Перевірка

100

X

3

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

Обмеження на узагальнені функції

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

 

#include <iostream>

#include <cmath>

using namespace std;

void myfunc(int i){

cout « "Значення = " « i « "\n";

}

void myfunc(double d){

double intpart;

double fracpart;

fracpart = modf(d &intpart);

cout << "Дробова частина = " « fracpart;

cout « "\n";

cout « "Ціла частина = " << intpart;

}

int main() {

myfunc(1);

myfunc(12.2);

return 0;

}


 

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

40509. Фольклористика XVIII века 23 KB
  Параллельно с этим шла публикация того что было собрано: Чулков Собрание разных русских песен 1776 Лёвшин Русские сказки 1780 Львов Собрание русских народных сказок с их голосами 1790 Но в этих сборниках было мало собственно русского фольклора: не выработали принципы по которым отбирать произведения для публикации конъюнктура Появление имперского сознания повлекло за собой стремление понастоящему узнать самое себя свою сущность. Итог: сборник Кирши Данилова Древние российские стихотворения 1804 в котором...
40510. Школа заимствования в русской фольклористике 20 KB
  Принципы Произведения одни и те же у разных народов. Причины сходства: одна прародина всех народов и всех фольклорных текстов обмен фольклорными богатствами в результате контакта между народами Недостатки Народы только и делают что заимствуют друг у друга фольклор = у народов нет своих национальных корней но это преувеличение.
40511. Радищев и фольклор 20.5 KB
  Радищев и фольклор. Концепция Радищева – вершина русской фольклористики XVIII века. Радищев как и многие другие интересуется фольклором. Фольклор выражает идеологию и психологию коллективное бессознательное народа.
40512. Анализ волшебно-сказочного сюжета по выбору студента 36.5 KB
  Фундаментальная оппозиция свой чужой определяет как известно всю поэтику и проблематику волшебной сказки. При этом оппозиция братьев осложняется тем что Иван–царевич в первой части сказки по терминологии В. В результате возникает как уже отмечалось подробно разработанная на разных уровнях система отражающая все важные для фольклорной сказки аспекты природный природносоциальный семейнородственный и родственный в смысле учения Н. Противоречие между метафизическим и бытовым уровнями мировосприятия отличающимися друг от друга как...
40513. Былины Киевского цикла 20 KB
  Три типа персонажей: князь Владимир богатыри враги Князь Владимир – центральный персонаж но богатырь – главный герой.
40515. Былички 21.5 KB
  Былички. Былички – истории о покойниках леших домовых – память о древнеславянской мифологии. Былички – мифологические рассказы о духах природы и домашнего очага. По композиции былички: мемораты – воспоминания о встрече; фабулаты – есть сюжет повествование.
40516. ГЕНЕАЛОГИЧЕСКАЯ КЛАССИФИКАЦИЯ ЯЗЫКОВ 320 KB
  Шаповал ГЕНЕАЛОГИЧЕСКАЯ КЛАССИФИКАЦИЯ ЯЗЫКОВ Новосибирск 2002. ОСНОВНЫЕ ПОЛОЖЕНИЯ ГЕНЕАЛОГИЧЕСКОЙ КЛАССИФИКАЦИИ ЯЗЫКОВ Понятие генеалогической классификации Генеалогическая классификация основана на определении родственных отношений между языками. При этом доказывается общность происхождения родственных языков и демонстрируется их развитие из единого часто реконструируемого специальными способами языка который получает название праязык. При генеалогической классификации языков прежде всего выясняется степень их родственных отношений и...
40517. Классификация согласных по различным признакам 24 KB
  2 По способу образования по характеру преграды: смычные взрывные: чистые смычные например: [б] [г]. аффрикаты смычнощелевые например: [ц] [ч]. вибранты дрожащие например: [р] щелевые фрикативные однофокусные например: [j] [ф] [в] двухфокусные – сложные щелевые шипящие щель образуется в двух местах. 3 По месту образования по активному органу: губные: губногубные билабиальные например : [п] губнозубные лабиодентальные например: [ф] язычные: переднеязычные: зубные например: [т]...