Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Шаблоны






Шаблоны позволяют создавать семейство функций или классов:

Template< список шаблонных типов > { < объявление> };

Шаблон функций задает образец объявлений перегруженных фун­кций (типы аргу­ментов и результатов работы функции могут меняться при ее различных вызовах) (п. 6.2.7). Фактичес­кие типы должны быть известны во время компиляции.

Пример шаблона функцииmaxim (нахождение наиболь­ше­го числа из двух чисел, все аргументы и результат имеют пе­ре­менный тип T):

template < class T> T maxim (T x, T y) // шаблон функции maxim

{ return (x > y)? x: y; } // тело функции maxim

int main(int argc, char **argv) // основная функция проверки шаблона

{ int i=2; int j=maxim(i, 0); // аргументы функции maxim типа int

float a=3.2, b=8.6; float m=maxim(a, b); //аргументы функции maxim типа float

cout < < j < < endl; cout < < m < < endl; getch(); return 0; // вывод результатов

} // конец функции

Шаблон классов задает образец определений семейства классов.

Пример шаблона Vector ‑ генератор классов одномерных массивов.

template < class T> class Vector;

Пространство имен

Механизм пространства внешних (глобальных) имен позволяет раз­бить приложе­ние на отдельные пространства, в каждом из которых можно определить свои глобальные иден­тификато­ры. Последние не зависят от других прост­ранств. Каждое пространство начинается со строки:

namespace < идентификатор подсистемы> { [< объявления> ] }.

Существуют три способа доступа к элементам подсистем:

1. Явная в виде < имя подсистемы> :: < переменная, функция> (first:: nds).

2. Доступ ко всем элементам в виде using namespace:: < имя подсистемы> (using namespace:: first).

3. Объявление нового идентификатора в локальном пространстве имен в ви­де: using:: < новое имя> (using:: nds;).

Пример:

namespace first { int i=10, j=11; } // объявление пространства first

int main(int argc, char **argv) // основная функция тестирования

{ cout < < first:: i < < endl; // вывод переменной i=10 из пространства first

using namespace:: first; // доступ ко всем переменным пространства first

cout < < j < < endl; // вывод переменной j=11 из пространства first

getch(); return 0; // задержка и выход из функции

} // конец тела основной функции

Явные объявления конструкторов

Если при объявлении конструктора указать слово explicit, то он тре­бу­ет, чтобы значения в операторах присваивания были пре­об­разованы к тому классовому типу, объектам которого эти значения присваиваются.

Пример объявления класс X и его двух конструкторов:

class X {public: explicit X (int); explicit X (const char*, int=0); }; // класс X

void F(X prm) { X a=X(1); X b=X(«строка», 0); a=X(2); } // функция F


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал