Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.67
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
#1

Что такое шаблоны в C++? - C++

08.05.2013, 07:49. Просмотров 3553. Ответов 49
Метки нет (Все метки)

Что такое шаблоны и для чего они нужны? Если не трудно приведите показательный пример применения шаблона.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2013, 07:49     Что такое шаблоны в C++?
Посмотрите здесь:
Что такое шаблоны функций? C++
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами? C++
C++ Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?
C++ Что такое хэндлер файла? Что такое файловый указатель?
Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них C++
Объяснить что такое "раздельная компиляция", что такое "интерфейс класса" и "реализация класса" на примере C++
Что такое перегрузка оператора? Что у меня в коде за ошибка? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 1
08.05.2013, 07:58     Что такое шаблоны в C++? #2
Цитата Сообщение от programina Посмотреть сообщение
Если не трудно приведите показательный пример применения шаблона.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
 
template<typename T>
T summ(const T & x1,const T & x2){
    return x1+x2;
}
 
 
 
int main(){
    int a=12;
    int b=34;
    std::cout<<summ(a,b)<<std::endl;
    double c=12.5;
    double d=32.12;
    std::cout<<summ(c,d)<<std::endl;
}
Добавлено через 35 секунд
Википедия: Шаблоны C++
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
08.05.2013, 08:07  [ТС]     Что такое шаблоны в C++? #3
Croessmah, то есть компилятор сам определяет тип данных во время компиляции?
Или тип определяется во время исполнения программы?
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,013
08.05.2013, 08:59     Что такое шаблоны в C++? #4
programina, на этапе компиляции.
okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 204
08.05.2013, 09:01     Что такое шаблоны в C++? #5
Цитата Сообщение от programina Посмотреть сообщение
Croessmah, то есть компилятор сам определяет тип данных во время компиляции?
Или тип определяется во время исполнения программы?
Ну он же сам указал тип данных)
-=ЮрА=-
08.05.2013, 09:04
  #6

Не по теме:

programina, по ссылке небольшой утилитарный аспект использования шаблонов Безопасный ввод через функцию-шаблон

programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
08.05.2013, 09:06  [ТС]     Что такое шаблоны в C++? #7
[off]
Цитата Сообщение от Croessmah Посмотреть сообщение
опера мини коряво форматирует страницу

Добавлено через 1 минуту
-=ЮрА=-, спасибо
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.05.2013, 09:32     Что такое шаблоны в C++? #8
Цитата Сообщение от programina Посмотреть сообщение
Что такое шаблоны и для чего они нужны? Если не трудно приведите показательный пример применения шаблона.
На плюсах существует две категории шаблонов: шаблоны классов и шаблоны функций. Шаблон функции есть однократно функция, выполняющая операции одной семантики с данными разных типов и описанная ровно один раз для всех типов своих параметров, она имеет один исходный текст своего тела для всех типов данных, к которым применима, а за различие внутренней реализации операций отвечает перегрузка используемых в ней операторов и вызываемых ею других функций, перегрузка самой функции выполняется автоматически. Шаблон же класса есть сокращённая запись нескольких классов, различающихся типами фактических членов и/или определёнными в этих классах константами, но не исходным текстом.

Добавлено через 9 минут
C++
1
2
3
4
5
6
7
8
template<typename T>
void swap(T &a, T &b)
{
 T t;
 t=a;
 a=b;
 b=t;
}
заменяет
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
void swap(int &a, int &b)
{
 int t;
 t=a;
 a=b;
 b=t;
}
void swap(char &a, char &b)
{
 char t;
 t=a;
 a=b;
 b=t;
}
void swap(float &a, float &b)
{
 float t;
 t=a;
 a=b;
 b=t;
}
void swap(double &a, double &b)
{
 double t;
 t=a;
 a=b;
 b=t;
}
void swap(signed &a, signed &b)
{
 signed t;
 t=a;
 a=b;
 b=t;
}
void swap(unsigned &a, unsigned &b)
{
 unsigned t;
 t=a;
 a=b;
 b=t;
}
void swap(short &a, short &b)
{
 short t;
 t=a;
 a=b;
 b=t;
}
void swap(long &a, long &b)
{
 long t;
 t=a;
 a=b;
 b=t;
}
 
void swap(signed short &a, signed short &b)
{
 signed t;
 t=a;
 a=b;
 b=t;
}
void swap(unsigned short &a, unsigned short &b)
{
 unsigned short t;
 t=a;
 a=b;
 b=t;
}
void swap(signed long &a, signed long &b)
{
 signed long t;
 t=a;
 a=b;
 b=t;
}
void swap(unsigned long &a, unsigned long &b)
{
 unsigned long t;
 t=a;
 a=b;
 b=t;
}...
и так для всех существующих в проекте типов, включая структуры и классы. Одна единственная функция swap будет менять местами операнды всех типов и иметь соответствующие перегруженные версии, если её описать в виде шаблона функции.
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
08.05.2013, 09:40  [ТС]     Что такое шаблоны в C++? #9
taras atavin, спасибо, достаточно наглядный пример.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
08.05.2013, 09:42     Что такое шаблоны в C++? #10
taras atavin,
Шаблон функции есть однократно функция, выполняющая операции одной семантики с данными разных типов и описанная ровно один раз для всех типов своих параметров, она имеет один исходный текст своего тела для всех типов данных, к которым применима, а за различие внутренней реализации операций отвечает перегрузка используемых в ней операторов и вызываемых ею других функций, перегрузка самой функции выполняется автоматически.
Никто не отменял специализацию функций.
Шаблон же класса есть сокращённая запись нескольких классов, различающихся типами фактических членов и/или определёнными в этих классах константами, но не исходным текстом.
Опять же никто не отменял специализацию.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.05.2013, 09:44     Что такое шаблоны в C++? #11
Цитата Сообщение от ForEveR Посмотреть сообщение
Никто не отменял специализацию функций.
Опять же никто не отменял специализацию. А вцелом верно, да.
Специализация - одна строчка для каждого набора типов и/или констант, целиком повторять весь исходный текст функции/класса не нужно.
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
08.05.2013, 09:49  [ТС]     Что такое шаблоны в C++? #12
У меня еще вопрос:
Компилятора под рукой нет, поэтому если не затруднит, не могли бы написать, обязательно ли использовать ссылку :
C++
template < typename T>
void something(T &a) // обязательно & ?
{
    cout << "a = " << a << endl;
}
-=ЮрА=-
08.05.2013, 09:56
  #13

Не по теме:

Цитата Сообщение от programina Посмотреть сообщение
(T &a) // обязательно & ?
- конечно нет, ссылка идёт если параметр будет модернизироваться внутри тела функции

ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
08.05.2013, 10:01     Что такое шаблоны в C++? #14
Цитата Сообщение от taras atavin Посмотреть сообщение
Специализация - одна строчка для каждого набора типов и/или констант, целиком повторять весь исходный текст функции/класса не нужно.
Зависит от специализации. Специализация специализации рознь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2013, 10:12     Что такое шаблоны в C++?
Еще ссылки по теме:
В этой части кода происходит объявление функций? Что такое void? Что в скобках? C++
C++ Шаблоны. Что я не так делаю?
C++ Что такое #, include, что это означает
Шаблоны без параметров, что это? C++
Что за пустые шаблоны template <> struct/inline? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
08.05.2013, 10:12  [ТС]     Что такое шаблоны в C++? #15
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение

Не по теме:

- конечно нет, ссылка идёт если параметр будет модернизироваться внутри тела функции

А в случае классов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class B
{
public:
    int a;
};
 
void something(B & b) // обязательно & ?
{
    b.a = 9;
}
 
int main()
{
    B b;
 
    b.a = 7;
 
    something(b);
    
    cout << b.a << endl;
}
Yandex
Объявления
08.05.2013, 10:12     Что такое шаблоны в C++?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru