Программирование на языке высокого уровня. Марапулец Ю.В. - 101 стр.

UptoLike

Составители: 

Здесь <class Data>- описание параметра шаблона, void - тип возвращаемого функ-
цией значения, A - имя класса, <Data>- параметр шаблона, print - имя функции без пара-
метров.
В случае нескольких параметров порядок их следования в описании_параметров и
параметрах_шаблона должен быть один и тот же, например:
template<class T1, class T2> struct A
{
void f1();
};
template<class T2, class T1> void A<T2, T1>
::f1(){ ... }
Ниже перечислены правила описания шаблонов.
Локальные классы не могут содержать шаблоны в качестве своих элементов.
Шаблоны методов не могут быть виртуальными.
Шаблоны классов могут содержать статические элементы, дружественные функции
и классы.
Шаблоны могут быть производными как от шаблонов, так и от обычных классов, а
также являться базовыми и для шаблонов, и для обычных классов.
Внутри шаблона нельзя определять friend-шаблоны.
При определении синтаксиса шаблона было сказано, что в него, кроме типов и
шаблонов, могут передаваться
переменные. Они могут быть целого или перечисляемого
типа, а также указателями или ссылками на объект или функцию. В теле шаблона они
могут применяться в любом месте, где допустимо использовать константное выражение.
В качестве примера создадим шаблон класса, содержащего блок памяти определенной
длины и типа:
template <class Type, int kol> class B
{
public:
B(){p = new Type [kol];}
~B() {delete [] p;}
operator Type *();
protected:
Type * p;
};
template <class Type, int kol> B <Type, kol>:: operator Type *()
{
return p;
}
После
создания и отладки шаблоны классов удобно помещать в заголовочные фай-
лы.
Чтобы создать при помощи шаблона конкретный объект конкретного класса (ин-
станцирование), при описании объекта после имени шаблона в угловых скобках необхо-
димо перечислить его аргументы:
имя_шаблона <аргументы> имя_объекта [(параметры_конструктора)];
Аргументы должны соответствовать параметрам шаблона. Имя шаблона вместе с
аргументами можно воспринимать как уточненное имя класса. Примеры создания объ-
ектов по шаблонам, описанным ранее:
101
     Здесь - описание параметра шаблона, void - тип возвращаемого функ-
цией значения, A - имя класса, - параметр шаблона, print - имя функции без пара-
метров.
     В случае нескольких параметров порядок их следования в описании_параметров и
параметрах_шаблона должен быть один и тот же, например:

template struct A
{
     void f1();
};
template void A::f1(){ ... }

     Ниже перечислены правила описания шаблонов.
• Локальные классы не могут содержать шаблоны в качестве своих элементов.
• Шаблоны методов не могут быть виртуальными.
• Шаблоны классов могут содержать статические элементы, дружественные функции
   и классы.
• Шаблоны могут быть производными как от шаблонов, так и от обычных классов, а
   также являться базовыми и для шаблонов, и для обычных классов.
• Внутри шаблона нельзя определять friend-шаблоны.
     При определении синтаксиса шаблона было сказано, что в него, кроме типов и
шаблонов, могут передаваться переменные. Они могут быть целого или перечисляемого
типа, а также указателями или ссылками на объект или функцию. В теле шаблона они
могут применяться в любом месте, где допустимо использовать константное выражение.
В качестве примера создадим шаблон класса, содержащего блок памяти определенной
длины и типа:

template  class B
{
     public:
       B(){p = new Type [kol];}
       ~B() {delete [] p;}
       operator Type *();
     protected:
       Type * p;
};
template  B :: operator Type *()
{
     return p;
}

      После создания и отладки шаблоны классов удобно помещать в заголовочные фай-
лы.
     Чтобы создать при помощи шаблона конкретный объект конкретного класса (ин-
станцирование), при описании объекта после имени шаблона в угловых скобках необхо-
димо перечислить его аргументы:

имя_шаблона <аргументы> имя_объекта [(параметры_конструктора)];

     Аргументы должны соответствовать параметрам шаблона. Имя шаблона вместе с
аргументами можно воспринимать как уточненное имя класса. Примеры создания объ-
ектов по шаблонам, описанным ранее:

                                             101