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

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

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

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

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

Что такое шаблоны и для чего они нужны? Если не трудно приведите показательный пример применения шаблона.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2013, 07:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что такое шаблоны в C++? (C++):

Что такое шаблоны функций? - C++
Люди обясните пожалуйста шаблоны функций На заннятиях чучуть провтыкал помогите вы буду благодарен!!

Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами? - C++
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?

Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа? - C++
Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?

Что такое хэндлер файла? Что такое файловый указатель? - C++
Что такое хэндлер файла? Что такое файловый указатель?

Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них - C++
Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них пожалуйста.

Объяснить что такое "раздельная компиляция", что такое "интерфейс класса" и "реализация класса" на примере - C++
Есть класс, содержащий объекты и конструктор. Конструктор объявляется в одном из cpp файлов(их несколько). Можно ли, как-то, использовать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,417
Записей в блоге: 3
Завершенные тесты: 1
08.05.2013, 07:58 #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++
2
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
08.05.2013, 08:07  [ТС] #3
Croessmah, то есть компилятор сам определяет тип данных во время компиляции?
Или тип определяется во время исполнения программы?
0
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
08.05.2013, 08:59 #4
programina, на этапе компиляции.
1
okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 204
08.05.2013, 09:01 #5
Цитата Сообщение от programina Посмотреть сообщение
Croessmah, то есть компилятор сам определяет тип данных во время компиляции?
Или тип определяется во время исполнения программы?
Ну он же сам указал тип данных)
1
-=ЮрА=-
08.05.2013, 09:04
  #6

Не по теме:

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

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

Добавлено через 1 минуту
-=ЮрА=-, спасибо
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.05.2013, 09:32 #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 будет менять местами операнды всех типов и иметь соответствующие перегруженные версии, если её описать в виде шаблона функции.
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
08.05.2013, 09:40  [ТС] #9
taras atavin, спасибо, достаточно наглядный пример.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
08.05.2013, 09:42 #10
taras atavin,
Шаблон функции есть однократно функция, выполняющая операции одной семантики с данными разных типов и описанная ровно один раз для всех типов своих параметров, она имеет один исходный текст своего тела для всех типов данных, к которым применима, а за различие внутренней реализации операций отвечает перегрузка используемых в ней операторов и вызываемых ею других функций, перегрузка самой функции выполняется автоматически.
Никто не отменял специализацию функций.
Шаблон же класса есть сокращённая запись нескольких классов, различающихся типами фактических членов и/или определёнными в этих классах константами, но не исходным текстом.
Опять же никто не отменял специализацию.
1
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.05.2013, 09:44 #11
Цитата Сообщение от ForEveR Посмотреть сообщение
Никто не отменял специализацию функций.
Опять же никто не отменял специализацию. А вцелом верно, да.
Специализация - одна строчка для каждого набора типов и/или констант, целиком повторять весь исходный текст функции/класса не нужно.
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
08.05.2013, 09:49  [ТС] #12
У меня еще вопрос:
Компилятора под рукой нет, поэтому если не затруднит, не могли бы написать, обязательно ли использовать ссылку :
C++
template < typename T>
void something(T &a) // обязательно & ?
{
    cout << "a = " << a << endl;
}
0
-=ЮрА=-
08.05.2013, 09:56
  #13

Не по теме:

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

1
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
08.05.2013, 10:01 #14
Цитата Сообщение от taras atavin Посмотреть сообщение
Специализация - одна строчка для каждого набора типов и/или констант, целиком повторять весь исходный текст функции/класса не нужно.
Зависит от специализации. Специализация специализации рознь.
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
08.05.2013, 10:12  [ТС] #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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2013, 10:12
Привет! Вот еще темы с ответами:

Что такое перегрузка оператора? Что у меня в коде за ошибка? - C++
Что же я написал?? Что оно не компилится? Что значит error C2275: Superclass: недопустимое использование этого типа в качестве выражения ...

В этой части кода происходит объявление функций? Что такое void? Что в скобках? - C++
В этой части кода происходит объявление функций? Что такое void? Что в скобках? void get(float **mas, int N, int M); void...

Шаблоны. Что я не так делаю? - C++
#ifndef _TSTACK_H_ #define _TSTACK_H_ ...

Что такое #, include, что это означает - C++
______


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.05.2013, 10:12
Ответ Создать тему
Опции темы

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