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

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

Войти
Регистрация
Восстановить пароль
 
Programmer.
Прогер
631 / 262 / 7
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
#1

для чего и как исползовать "template"? - C++

20.01.2012, 07:25. Просмотров 504. Ответов 4
Метки нет (Все метки)

Привет всем...

может ктото обяснит как исползовать template?
спасибо заранее...

П.С гугл не впомош, если ктото даст пример то буду рад..

Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2012, 07:25     для чего и как исползовать "template"?
Посмотрите здесь:

Для чего в коде нужна строка "using namespace std"? C++
C++ Для чего нужен "operator"?
C++ Призапуске не происходит не чего... Просто пустой экран с надписью"нажмите кнопку для продолжения"
C++ Для чего именно и как исползуется dynamic_cast(обясните "ЯЗИКОМ ЧЕЛОВЕКА")
Описать класс "полином" - Для чего нужен конструктор по умолчанию? C++
Для чего функции поместили в "тип данных"? C++
Для чего используется "{}" (слитно) в С++? C++
C++ Template argument required for class "LinkedListIterator"
Для чего используют класс "Стек"? C++
C++ Для чего нужно дописывать "**", две звездочки?
C++, для чего служит указатель "this->"? C++
C++ Ошибка "no instance of function template"

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
20.01.2012, 07:40     для чего и как исползовать "template"? #2
Начнём с истоков. Рассмотрим код функции на С для сложения двух чисел типа int:
C
1
2
3
4
int sum(int a, int b)
{
    return a + b;
}
До тех пор, пока нам достаточно складывать целые числа - всё хорошо. Но если нам понадобилось сложить действительные? Придётся писать для этого другую функцию, с другим именем. Набор функций теперь будет выглядеть так:
C
1
2
3
4
5
6
7
8
9
int int_sum(int a, int b)
{
    return a + b;
}
 
double double_sum(double a, double b)
{
    return a + b;
}
Понятно, что для каждого нового типа данных необходимо писать новую функцию. Программист в итоге должен помнить огромное количество имён для каждого типа данных. Запутаться проще простого.
В С++ появилось новое средство - перегрузка функций. Это значит, что можно иметь несколько функций с одним и тем же именем, которые отличаются только количеством или/и типом параметров. Тогда наш набор функций станет выглядеть так:
C++
1
2
3
4
5
6
7
8
9
int sum(int a, int b)
{
    return a + b;
}
 
double sum(double a, double b)
{
    return a + b;
}
Пользователю функций теперь не нужно помнить кучу имён, достаточно знать, что если функции sum передать два параметра нужного типа, на выходе будет верный результат. Однако задача программиста-разработчика библиотеки - постоянно поддерживать набор функций в актуальном состоянии. Например, понадобилась такая же функция для сложения строк. Придётся в библиотеку добавить новую функцию:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int sum(int a, int b)
{
    return a + b;
}
 
double sum(double a, double b)
{
    return a + b;
}
 
std::string sum(const std::string& a, const std::string& b)
{
    return a + b;
}
Если посмотреть в тела всех этих функций - видно, что там выполняется один и тот же код - применения оператора + для двух переданных в функцию аргументов. Как бы сократить количество кода? Для этого достаточно написать одну шаблонную функцию:
C++
1
2
3
4
5
template<typename T>
T sum(const T& a, const T& b)
{
    return a + b;
}
Главное, чтобы для типа T был перегружен оператор +. При компиляции вместо T будет подставлен конкретный тип, который будет выведен из типа параметров. При этом для каждого используемого типа будет сгенерирована своя версия функции, т.е. в итоге мы всё равно получим несколько функций, по одной на каждый тип, который используется при вызове шаблонной функции. Но для нас это будет незаметно, в коде по-прежнему будет одна шаблонная функция.
Programmer.
Прогер
631 / 262 / 7
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
21.01.2012, 03:02  [ТС]     для чего и как исползовать "template"? #3
silent_1991,
Огромное мпасибо

А как template с отношением классов? или в простой код(буз функций)
Jupiter
Каратель
Эксперт С++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.01.2012, 05:09     для чего и как исползовать "template"? #4
Цитата Сообщение от Programmer. Посмотреть сообщение
А как template с отношением классов? или в простой код(буз функций)
почитай хотя бы вики
Black Fregat
1362 / 992 / 215
Регистрация: 31.05.2009
Сообщений: 4,150
21.01.2012, 05:26     для чего и как исползовать "template"? #5
Цитата Сообщение от Programmer. Посмотреть сообщение
А как template с отношением классов?
Идея та же самая - скажем, шаблонный класс std::vector из стандартной библиотеки позволяет сделать вектор "чего угодно", но каждый раз при использовании нужно явно указывать тип содержимого, например, std::vector<int> или std::vector<std::string> или даже std::vector<std::vector<int> >. И все методы будут работать с этим типом без дополнительных телодвижений.
Цитата Сообщение от Programmer. Посмотреть сообщение
или в простой код(буз функций)
Только классы или функции
Yandex
Объявления
21.01.2012, 05:26     для чего и как исползовать "template"?
Ответ Создать тему
Опции темы

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