![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Шаблоны
Шаблоны позволяют создавать семейство функций или классов: 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
|