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

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

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

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

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

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

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

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2012, 07:25
Я подобрал для вас темы с готовыми решениями и ответами на вопрос для чего и как исползовать "template"? (C++):

Для чего именно и как исползуется dynamic_cast(обясните "ЯЗИКОМ ЧЕЛОВЕКА") - C++
привет ребята ктото может привести хороший пример о dynamic_cast ?(об осталних я выучил).. Именно для чего он...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно". Я так...

Для чего в коде нужна строка "using namespace std"? - C++
у меня возникла проблема при удалении "using namespace std;" перестает работать cout точнее пишет Build FAILED. File2.cpp(11,6):...

Для чего функции поместили в "тип данных"? - C++
Вопрос про функции. Для чего функции поместили в "тип данных"?

Для чего нужно дописывать "**", две звездочки? - C++
есть чужой код, на основе которого я делаю свой вариант. double **b = copy_m(a, n); по идее b двумерный массив, в который...

Описать класс "полином" - Для чего нужен конструктор по умолчанию? - C++
неоюходимо написать класс для работы с полиномами в нете нашел что-то поожее может кто-нибудь объяснить для чего нужен конструктор по...

4
silent_1991
Эксперт С++
5006 / 3064 / 149
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
20.01.2012, 07:40 #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 будет подставлен конкретный тип, который будет выведен из типа параметров. При этом для каждого используемого типа будет сгенерирована своя версия функции, т.е. в итоге мы всё равно получим несколько функций, по одной на каждый тип, который используется при вызове шаблонной функции. Но для нас это будет незаметно, в коде по-прежнему будет одна шаблонная функция.
2
Programmer.
Прогер
631 / 262 / 7
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
21.01.2012, 03:02  [ТС] #3
silent_1991,
Огромное мпасибо

А как template с отношением классов? или в простой код(буз функций)
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.01.2012, 05:09 #4
Цитата Сообщение от Programmer. Посмотреть сообщение
А как template с отношением классов? или в простой код(буз функций)
почитай хотя бы вики
1
Black Fregat
2396 / 1211 / 302
Регистрация: 31.05.2009
Сообщений: 4,804
21.01.2012, 05:26 #5
Цитата Сообщение от Programmer. Посмотреть сообщение
А как template с отношением классов?
Идея та же самая - скажем, шаблонный класс std::vector из стандартной библиотеки позволяет сделать вектор "чего угодно", но каждый раз при использовании нужно явно указывать тип содержимого, например, std::vector<int> или std::vector<std::string> или даже std::vector<std::vector<int> >. И все методы будут работать с этим типом без дополнительных телодвижений.
Цитата Сообщение от Programmer. Посмотреть сообщение
или в простой код(буз функций)
Только классы или функции
1
21.01.2012, 05:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2012, 05:26
Привет! Вот еще темы с ответами:

Для чего используют класс "Стек"? - C++
Подскажите для чего используют класс стек и зачем он вопще нужен?

Описать класс "Контейнер" как объект, предназначенный для транспортировки классов "Строительных блоков" - C++
1. Опишите класс &quot;Строительный блок&quot;, описывающий габариты и массу блока прямоугольной формы. Данные класса: Габариты, масса. Методы...

Призапуске не происходит не чего... Просто пустой экран с надписью"нажмите кнопку для продолжения" - C++
вод код что не так? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; int x,n,m,i; int...

C++, для чего служит указатель "this->"? - C++
Для чего нужен указатель &quot;this&quot;?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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