По последним данным, на рынке продается по крайней мере 2 768 942 книги о С++, не говоря уже о всевозможных курсах, обучающих программах, журналах и семинарах с коктейлями. И все же в этом изобилии наблюдается удручающее однообразие.
Параметризованные функции классов определяются так же (разве что вам понадобится больше угловых скобок < и >). Давайте модифицируем класс ListNode так, чтобы его функции не определялись при объявлении класса.
template <class Type>
class ListNode {
private:
ListNode<Type*> next;
Type* data;
public:
ListNode(Type* d, ListNode<Type>* n = NULL);
~ListNode();
Type* Data();
ListNode<Type>* Next();
};
template <class Type>
ListNode<Type>::ListNode(Type* d, ListNode<Type>* n = NULL)
: next(n), data(d)
{
}
template <class Type>
ListNode<Type>::~ListNode()
{
delete next;
}
template <class Type>
Type* ListNode<Type>::Data()
{
return data;
}
template <class Type>
ListNode<Type>* ListNode<Type>::Next()
{
return next;
}
Помните: все это должно находиться в файле .h. Исключение составляют ситуации, когда функции класса вызываются только из файла .срр, в котором они определяются. В этом случае определения функций класса должны предшествовать их первому использованию.
Просматривать полку книг о С++ в книжном магазине ничуть не интереснее, чем литературу по бухгалтерии. В сущности, все книги пересказывают одно и то же и отличаются разве что по весу и количеству цветов в диаграммах и таблицах.