Какой тип данных будет хранить список?
Тип T заменяется компилятором на выбранный. Код шаблона при этом не меняется.
Список List<int>
Список пуст.
Операции
Совет. Для типа string попробуйте значения
apple, banana, cherry.
Для char — одиночные буквы.
Один шаблон — два представления
Слева — сам шаблон класса (не меняется). Справа — код, который создаёт конкретный объект
List<T> и вызывает его методы (тип T подставляется).
Шаблон (не меняется)
template<class T>
class List {
struct Node {
T data;
Node* next;
Node(T d) : data(d), next(0) {}
};
Node* head;
public:
List() : head(0) {}
~List();
void Add(T value);
bool Remove(T key);
Node* Find(T key);
void Print();
};
Использование с типом int
Что происходит во время компиляции. Когда вы пишете
List<int> l;,
компилятор создаёт отдельную версию класса, где вместо T стоит int.
Для List<double> — свою. Это называется инстанцированием шаблона.
Код шаблона при этом пишется один раз, а работает с любым типом.
Задание
- Создайте список целых и добавьте числа 10, 20, 30. Убедитесь, что все они видны.
- Переключитесь на
double— что произошло со списком? Почему? - Для типа
stringдобавьте три разных слова. Как изменился код использования? - Почему нельзя в одном объекте
List<int>хранить числа, а строки — нет? - Напишите шаблон класса
Pair<A, B>, который хранит два значения разных типов.