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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти наибольший общий делитель всех элементов массива http://www.cyberforum.ru/cpp-beginners/thread431725.html
Такая задача: Найти наибольший общий делитель всех элементов массива (на который они все делятся без остатка).
C++ Запуск функции О_о есть функция void Account::Save (FILE *f) { int nlen = strlen (card_holder); fprintf (f, "%d %s %c%c%c %c%c/%c%c %d\r\n", sum, card_number, cvc2, cvc2, cvc2, validity.month, validity.month, validity.year, validity.year, nlen); fprintf (f, "%s\r\n", card_holder); http://www.cyberforum.ru/cpp-beginners/thread431714.html
C++ Считывание нескольких строк с пробелами
Я знаю, что есть функция getline. Но если мне в коде надо считать несколько разных строк с пробелами, что мне делать? Потому что при дебаге выяснил, что когда программа проходит через 2ой getline, она уже не считывает То есть, мне надо считать 2 строки( например) I love biscuits Hello world! 2 разные строки и обе должны быть с пробелами. Как это реализовать на C++?
Задание по Страуструпу. Требуется помощь C++
Доброй ночи! на картиночке задание по Страуструпу. первую и третью часть я довел до рабочего состояния, но то как оно сделано вызвало интерес посмотреть а как оно должно быть. Поэтому прошу вас, как опытных программистов, уделить какое то время и решить вторую часть задания про входной поток. Это позволит посмотреть как правильно писать код, позволит увидеть возможные простые решения этой...
C++ Оконный интерфейс. Книги. http://www.cyberforum.ru/cpp-beginners/thread431696.html
С++ можно освоить прочитав известные книги по С++ и спокойненько писать программы с консольным интерфейсом (с я относительно разобрался). Но как создавать оконные приложения? Посоветуйте книжку.. Win32.. .Net и т.д. у меня голова кругом идет, много названий. Но с чего начать. Создание приложений Win32 кажется слишком сложным, и я боюсь начать читать книгу(кстати.. Какую книгу?) о технологии...
C++ Условие if Народ помогите составить условие, пишу игру, имеется пуля размером 8х8 и корабль 37х37 , подскажите как сделать проверку попала ли пуля в корабль, я сделал так, но работает не правильно for(int i=1;i<=37;i++) { for(int k=1;k<=8;k++) { if(px+k==x+i&&py+k==y+i||px-k==x-i&&py-k==y-i||px+k==x+i&&py-k==y+i||px-k==x+i&&py+k==y+i) подробнее

Показать сообщение отдельно
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
20.01.2012, 07:40     для чего и как исползовать "template"?
Начнём с истоков. Рассмотрим код функции на С для сложения двух чисел типа 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 будет подставлен конкретный тип, который будет выведен из типа параметров. При этом для каждого используемого типа будет сгенерирована своя версия функции, т.е. в итоге мы всё равно получим несколько функций, по одной на каждый тип, который используется при вызове шаблонной функции. Но для нас это будет незаметно, в коде по-прежнему будет одна шаблонная функция.
 
Текущее время: 14:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru