![]() |
|
Программирование >> Дополнительные возможности наследования
63: itsName = rhs.GetNameO; 64; itsAge = rhs.GetAgeO; 65; return *this; 66; } 67; 68; ostream& operator (ostream& os, const Students rhs) 69; { 70; OS rhs.GetNameO << is rhs,GetAgeO years old ; 71; return os; 72; } 73; 74; template<class T, class A> 75; void ShowMap(const map<T, A>& v); отображает свойства карты 76; 77; typedef map<string, Student> SchoolClass; 78; 79; int mainO 80; { 81; Student Harry( Harry , 18); 82; Student Sally( Sally , 15); 83; Student Bill( Bill , 17); 84; Student Peter( Peter , 16); 86; SchoolClassMathClass; 87; MathClass[Harry.GetName()] = Harry; 88; MathClass[Sally,GetName()] = Sally; 89; MathClass[Bill,GetName()] = Bill; 90; MathClass[Peter,GetName()] = Peter; 92; cout MathClass;\ n ; 93; ShowMap(MathClass); 95; cout We know that MathClass[ Bill ],GetName() 96; is MathClass[ Bill ],GetAgeO years old\ n ; 98; return 0; 99; } 100; 101; 102; Отображает свойства карты 103; 104; template<class Т, class A> 105; void ShowMap(const map<T, A>& v) 106; { 107; for (map<T, A>;;const iterator ci = v,begin(); 108; ci != v.endO; ++ci) 109; cout ci->first ; ci->second \ n ; 110; 111; cout endl; 112; } MathClass; Bill; Bill is 17 years old Harry: Harry Is 18 years old Peter: Peter is 16 years old Sally: Sally is 15 years old We know that Bill is 17 years old В строке 3 в программу добавляется файл заголовка <тар>, поскольку будет использоваться стандартный класс-контейнер тар. Для отображения элементов карты определяется шаблонная функция ShowMap. В строке 77 класс SchoolClass определяется как карта элементов, каждый из которых состоит из пары (ключ, значение). Первая составляющая пары - это значение ключа. В нашем классе SchoolClass имена студентов используются в качестве ключевых значений, которые имеют тип string. Ключевое значение элемента в контейнере карты должно быть уникальным, т.е. никакие два элемента не могут иметь одно и то же ключевое значение. Вторая составляющая пары - фактический объект, в данном примере это объект класса student. Парный тип данных реализован в библиотеке STL как структура (тип данных struct), состоящая из двух членов, а именно: first и second. Эти члены можно использовать для получения доступа к ключу и значению узла. Пропустим пока функцию main() и рассмотрим функцию ShowMap, которая открывает доступ к объектам карты с помошью константного итератора. Выражение ci->first (строка 109) указывает на ключ (имя студента), а выражение ci->second - на объект класса Student. В строках 81-84 создаются четыре объекта класса Student. Класс MathClass определяется как экземпляр класса SchoolClass (строка 86), а в строках 87-90 уже имеющиеся четыре студента добавляются в класс MathClass: map object[key value] = object value; Для добавления в карту пары ключ-значение можно было бы также использовать функции push back() или insertO (за более подробной информацией обратитесь к документации, прилагаемой к вашему компилятору). После добавления к карте всех объектоа класса Student можно обращаться к любому из них, используя их ключевые значения. В строках 95 и 96 для считывания записи, относящейся к студенту Биллу (объекту Bill), используется выражение MathClass[ Bill ]. Другие асспциатианые контейнеры Класс-контейнер мультикарты - это класс карты, не ограниченный уникальностью ключей. Это значит, что одно и то же ключевое значение могут иметь не один, а несколько элементов. Класс-контейнер множества также подобен классу карты. Единственное отличие в том, что его элементы представляют собой не пары ключ-значение, а только ключи. Наконец, класс-контейнер мультимножества - это класс множества, который позволяет иметь несколько ключевых значений. Классы алгоритмов Контейнер - это удобное место для хранения последовательности элементов. Все стандартные контейнеры содержат методы управления контейнерами и их элементами. Однако манипулирование собственными данными в программах с помощью этих методов может потребовать от профаммиста написания обширного программного кода, что чревато появлением ошибок. Но поскольку большинство операций, выполняемых над данными, рутинны и повторяются от профаммы к профамме, то подборка универсальных алгоритмов может существенно облегчить написание программ обработки данных контейнера. Стандартная библиотека предоставляет около 60 стандартных алгоритмов, которые выполняют большинство базовых и часто используемых операций, характерных для контейнеров. Стандартные алгоритмы определены в файле <algorithm> в пространстве имен std. Чтобы понять, как работают стандартные алгоритмы, необходимо познакомиться с понятием объектов функций. Объект функции - это экземпляр класса, в котором определен перефуженный оператор вызова функции(). В результате этот класс может вызываться как функция. Использование объекта функции показано в листинге 19.11. flucmuHz 19.11. оеъекш функции
0 12 3 4 В Сфоках 4-11 определяется шаблонный класс Print. Перефуженный в сфо-ках 7-10 оператор вызова функции Опринимает объект и перенаправляет его в стандартный поток вывода. В сфОке 15 определяется объект DoPrint как экземпляр класса Print. После этого, чтобы вывести на печать любые целочисленные значения, объект DoPrint можно использовать подобно обычной функции, как показано в сфОке 17.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |