Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2012, 16:33   #1
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию Шаблоны

Доброго времени!
Часто вижу "шаблоны класса" и так далее..
почитал на вики, что-то плоховато понял..
Объясните пожалуйста зачем они, и как ими пользоваться?
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 24.05.2012, 16:46   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

http://yandex.ru/yandsearch?text=%D0...A%D1%83&lr=240
_Bers вне форума Ответить с цитированием
Старый 24.05.2012, 16:48   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я полистал немного гугл по запросу шаблоны класса.
ИМХО, словосочетания применяется не корректно.

обычно идет речь о шаблонном классе.
а не о заготовке класса(как лично у меня видится смысл сего словосочетания).

тут еще может идти речь, что класс должен соответствовать определенному шаблону, как например алгоритмы в STL, им без разницы каком класс, для работы им нужны определенные методы(например begin()/end() ).
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.05.2012, 19:18   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
я полистал немного гугл по запросу шаблоны класса.
ИМХО, словосочетания применяется не корректно.

обычно идет речь о шаблонном классе.
а не о заготовке класса(как лично у меня видится смысл сего словосочетания).

тут еще может идти речь, что класс должен соответствовать определенному шаблону, как например алгоритмы в STL, им без разницы каком класс, для работы им нужны определенные методы(например begin()/end() ).
"Шаблон класса" - суть декларация на языке, как конструировать отдельные модели (устройства) классов

"Шаблонный класс" - суть конкретный продукт шаблона класса, или по другому инстанцированный класс, сконструированный по шаблону.

"Шаблонный класс" является типом, построенный на основании шаблона.
"Шаблон класса" типом не является. Он является описанием возможных типов.
=======================
А вот что говорит об этом автор знаменитой книги:


...Присутствует некоторая путаница в отношении того, как следует именовать класс, являющийся шаблоном.

-Термин "шаблон класса" (class template) означает, что класс является шаблоном. Другими словами, это - параметризированное описание семейства классов.

-Термин "шаблонный класс" (template class), с другой стороны, используется:
- как синоним "шаблон класса" (вот где путаница начинается(!) Примичание: _Bers).
- для обозначения классов, генерированных из шаблона.
- для обозначения классов с именем, которое является идентификатором шаблона.

(Ц) Вандевурд, Джосаттис - Шаблоны C++ , 111страница, глава 7 "Основные термины в области шаблонов", раздел 7.1 "Шаблон класса, или шаблонный класс"


От себя добавлю, что я не согласен с Джосаттисом в том, что различия в трактовках терминологии не существенны.
В простых случаях может быть это и не суть важно. Но без понимания идеи шаблонов нельзя заниматься мета-программированием.

Только когда человек поймёт, что шаблон класса не является типом, только тогда он сможет понять, что на самом деле шаблон - это описание будующих конструкций различных типов. Только тогда он сможет изготавливать мета-программы на шаблонах, с помощью которых можно будет уже конструировать целые архитектурные сооружения.
_Bers вне форума Ответить с цитированием
Старый 24.05.2012, 20:25   #5
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Ребят, большое спасибо вам!
Не могли бы вы пояснить на примере? Мне так легче понять будет.
Зачем шаблоны, как и где их применять.
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 24.05.2012, 20:39   #6
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от asmars Посмотреть сообщение
Ребят, большое спасибо вам!
Не могли бы вы пояснить на примере? Мне так легче понять будет.
Зачем шаблоны, как и где их применять.
Напиши мне функцию, которая будет принимать на входе аргумент типа int и удваивать его значение.

Теперь напиши точно такую же функцию, только для float

А теперь - точно такую же, только для double

...

А завтра ещё какую нибудь.

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

А при помощи шаблонов, можно один раз написать шаблон функции: "каким бы ни был аргумент этой функции - просто удвой его".

И тогда, в такую шаблонную функцию можно будет пихать что угодно, что умеет удваиваться. И не придется больше писать никаких перегрузок.
_Bers вне форума Ответить с цитированием
Старый 24.05.2012, 21:02   #7
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

а перегрузка - это изменение параметров вызова существующей функции?

то есть можно вместо перегрузки писать шаблон класса, или как?
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 25.05.2012, 03:50   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

http://ru.wikipedia.org/wiki/Перегру...едур_и_функций
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.05.2012, 11:34   #9
StayCool
Пользователь
 
Регистрация: 25.11.2011
Сообщений: 12
По умолчанию

_Bers
Классно объясняешь, даже я понял
StayCool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шаблоны Freddi Krjuger Общие вопросы C/C++ 6 14.11.2010 20:55
Шаблоны С++ Secc Помощь студентам 4 27.12.2009 17:35
Шаблоны C++ Viamy Помощь студентам 0 27.12.2009 16:10
Шаблоны, Си++ Нataша Помощь студентам 1 11.12.2009 01:35
Шаблоны bondik Общие вопросы C/C++ 10 04.05.2008 09:50