Составители:
Рубрика:
Здесь <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
Страницы
- « первая
- ‹ предыдущая
- …
- 99
- 100
- 101
- 102
- 103
- …
- следующая ›
- последняя »
