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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для чего используется "{}" (слитно) в С++? - C++
например: Triangle(double A, double B, double C) : Triad(A, B, C) {}

Для чего нужен "operator"? - C++
Вот такой пример : One One::operator+=(One & rhs) { *itsA+=rhs.Get(); return *this; } Вообще ну ни как не могу догнать...

Template argument required for class "LinkedListIterator" - C++
#ifndef LINKEDLIST_H #define LINKEDLIST_H #include <iostream> using namespace std; template <typename Type> class...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4958 / 3034 / 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
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.01.2012, 05:09     для чего и как исползовать "template"? #4
Цитата Сообщение от Programmer. Посмотреть сообщение
А как template с отношением классов? или в простой код(буз функций)
почитай хотя бы вики
Black Fregat
1370 / 1000 / 217
Регистрация: 31.05.2009
Сообщений: 4,191
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"?
Ответ Создать тему
Опции темы

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