|
Программирование >> Программирование на языке c++
имеет компонент-функцию Hash Value или глобальную функцию HashValue. Класс string имеет hash() функцию, которая используется для поиска связанных строк. Шаблон TDictionaryAsHashTable позволяет построить объект словаря заданного типа (в нашем случае типа Str). Размер словаря можно задать по умолчанию (как и сделано в нашем примере) или указать его явно при конструировании соответствующего объекта. Функция Find этого класса возвращает указатель на найденный объект, который задан в виде параметра. Если этот указатель равен NULL, то объект не найден. Функции КеуО и ValueO являются функциями шаблона TDDAssociation и возвращают значения объекта ключ для поиска и объекта связанное с ключом значение . Ниже приводится два простых примера работы с программой: 1. Aveiro<Enter> Aveiro - Portuguese city 2. Paris<Enter> not found Здесь слово <Enter> указывает на необходимость нажатия клавиши ВВОД (соответствующая строка должна быть введена в компьютер). После ввода строки (1 и 2) в каждом примере записан выводимый результат. 6.8. Заключение Сформулируем основные выводы и правила использования шаблонов: >- параметризированный класс или шаблон (template) определяет правила построения каждого отдельного класса из множества разрешенных (допустимых классов); -f имеется два типа шаблонов: шаблоны классов (class template) и шаблоны функций (function template). Шаблоны можно использовать как для локальных функций, заданных внутри класса, так и для глобальных функций; ♦шаблон позволяет передать в класс (в функцию) один или несколько типов в виде параметров. Типом может быть любой стандартный тип (char, float и т. п.) и новый тип, определенный пользователем (например, класс); каждый аргумент шаблона функции должен определять тип как минимум одного аргумента этой функции. Это гарантирует, что нужный вариант функции будет выбран на основании анализа типов ее аргументов; параметры шаблона задаются в угловых скобках (< >). Некоторые параметры в угловых скобках в свою очередь тоже задаются в угловых скобках. При этом появляются конструкции ввда (< ... < ... > >). Здесь между рядом расположенными угловыми скобками > > надо записывать пробел, чтобы компилятор не перепутал параметры шаблона со знаком сдвиг вправо ( ); ♦ шаблоны позволяют строить программы, составленные из относительно независимых частей, одна из которых ориентирована на построение интерфейса, а другая: связана с деталями реализации различных функций. В конечном счете эта особенность дает новые средства поддержки базовой идеи пакетирования (encapsulation) и абстрактных типов данных, а именно разделению интерфейса и реализации; принятые в языках CIC++ стандартные правила преобразования типов аргументов нельзя использовать для аргументов шаблона функции (см. § 6.4); функция-шаблон может быть переопределена в двух случаях: если есть другие функции с тем же именем, если есть другие функции-шаблоны с тем же именем; > аргументами шаблона могут быть не только типы, но и константные выражения; > при объявлении объектов классов, заданных с помощью шаблона, два объекта являются объектами одного и того же класса, если они имеют один и тот же шаблон класса, и аргументы этого шаблона имеют одни и те же значения (см. § 6.5); ♦ два разных типа, сгенерированных из одного и того же шаблона, всегда будут разными независимо от возможных автоматических преобразований, принятых в языке С++; ♦ аргументами шаблона могут быть только константные выражения (т. е. в этом случае среди аргументов не будет типов); при задании в качестве аргументов шаблона базового и производных классов TepsnoT силу многие соглашения об использовании объектов этих классов (см. § 6.6); между шаблонами и наследованием существует взаимосвязь. Шаблоны позволяют отразить общность различных типов. Принципы наследования позволяют выразить общность интерфейса для различных классов; совместное использование шаблонов и принципов наследования предоставляет мощный инструмент для разделения интерфейса и внутренних функций (см. § 6.6); контейнеры классов, построенные на основе шаблонов, могут быть использованы как фундаментальные структуры данных и абстрактные типы данных для построения сложных программ (см. § 6.7); ♦ объявление шаблона может быть только глобальным; ♦ функция со спецификатором friend, заданная в шаблоне, может быть использована так, как это показано ниже в примере: template<class Т> class my class { friend void f(); имеет спецификатор friend для всех классов my class, сгенерированных по шаблону friend my ciass<T>* ff{my class<T>*); каждый класс my class имеет friend функцию ff своего типа ........................... }; каждый класс или функция, сгенерированные по шаблону, имеют свои собственные копии статических компонентов. В заключение укажем, что различные компиляторы языка С++ имеют свои особенности обработки шаблонов и это надо учитывать при построении программ.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |