
Урок #24 - Шаблоны функций (template)
Видеоурок
Шаблоны функций, а также шаблоны классов в языке C++ это мощные технологии, что позволяют создавать шаблонные конструкции и далее при передачи данных передавать как значения, так и типы данных.
Для создания шаблонной функции необходимо использовать ключевое слово template
, а также в угловых скобках необходимо указывать принимаемый тип данных. Можно принимать один или несколько типов данных.
Пример создания шаблонной функции:
template <typename Type1> // Указываем что это шаблон функции
// Принимаем параметр value и его тип данных мы получим
// также в качестве передаваемого параметра - Type1
void funct (Type1 *value) {
cout << value; // Просто выводим это значение
}
// Здесь мы получаем сразу два типа данных
template <typename Type1, typename Type2>
void funct (Type1 *value, Type2 *newValue) {
// Мы можем использовать передаваемые типы в самой функции
Type1 someNew;
cout << newValue; // Просто выводим значение
}
// Вызов функции с одним параметром
funct<double>(value);
// Вызов с несколькими параметрами
funct<char, double>(value, oneMoreValue);
Исходный код
#include <iostream>
using namespace std;
template <typename T1, typename T2>
T2 printArr (const T1 * array, int i) {
int count = 0;
for (int j = 0; j < i; j++) {
cout << array[j] << " ";
count++;
}
cout << endl;
return count;
}
int main(int argc, const char * argv[]) {
const int iSize = 3, fSize = 2, dSize = 3, cSize = 5;
int i_arr[iSize] = {23, 45, 78};
float f_arr[fSize] = {12.2, 67.5};
double d_arr[dSize] = {3.345, 7.567, 9.023};
char c_arr[cSize] = {"HI!!"};
cout << "Массив с типом данных int: ";
cout << "Количество элементов: " << printArr<int, int>(i_arr, iSize) << endl;
cout << "Массив с типом данных float: ";
cout << "Количество элементов: " << printArr<float, int>(f_arr, fSize) << endl;
cout << "Массив с типом данных double: ";
cout << "Количество элементов: " << printArr<double, int>(d_arr, dSize) << endl;
cout << "Массив с типом данных char: ";
cout << "Количество элементов: " << printArr<char, int>(c_arr, cSize) << endl;
cin.get();
return 0;
}
Задание к уроку
Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца
Также стоит посмотреть