![]() |
|
Программирование >> Расширенная версия языка c++
list<char> list<char> *p, *last; , i; , - создание списка last = sstart; eor(i=l; i<26; i++) { .... p = new list<char (a + i] ; p->add(last) ; :M j.. last = p; вывод списка p cout p } . . return 0; . , Как видите, объявление родового класса похоже на объявление родовой функции. Тип данных, хранящихся таске, становится родовым в объявлении класса. Но он .ляется, пока не объявлен объект, который и задает реальный тин данных. В данном примере объекты и указатели создаются внутри функции О, где указ1вается, что типом хранящихся в списке данных является ти ат. Обратите особое внимание на следующее объявление: list<char> start (а); Простой родовой связанный список # include <iostreain> using namespace std; . .- . . . ... : - template <clas a t> class list { . . ,-. data t data; ,. i;; =r . . .. - list *next; . . . ; -.rj- . . , public: list (data t d) ; void add (list *node) { node->next = this; next = 0; } list *getnext() { return next; } data t getdataO { return data; } 1 ... i. template <class data t : : list (data t d) data = d; next = 0; int mainO 334 Самоучитель~:.С++ Отметьте, что необходимый тип данных задается между угловыми скобками. Наберите и выполните эту программу. В ней создается связанный список с символами алфавита, который затем выводится на экран. Путем простого изменения типа данных, который указывается при создании объектов, можно изменить тип данных, хранящихся в списке. Например, с следую- щего можно создать другой где можно было бы хранить целые: list<int> int start (1) ; Можно также использовать список list для хранения создаваемых вами типов данных. Например, для хранения адресной информации можно воспользоваться следующей структурой: struct addr { char name [40] ; char street[40]; char city[30]; char state [3] ; char zip[12]; } . Теперь, чтобы с помощью списка Ust хранить объекты типа addr, используйте такое объявление (предположим, что объект stnictvar содержит правильную структуру addr): list<addr> obj (structvar); 2. Ниже представлен другой пример родового класса. Это переработанный класс stack, впервые приведенный в главе 1. Однако в данном случае класс stack реализован как шаблон. Следовательно, в нем можно хранить объекты любого типа. В представленном ниже примере создаются стек символов и стек действительных чисел: Здесь показав садовой стек ttinclude <iostreain> . . . using namespace std; ttdefine SIZE 10 Создание родового класса stack template <class 3tackType> class stack { StacliType stck [SIZE]; содержит стек in tos; индекс вершины стека т public: voi tO { to 0; } инициализация стека void push (StackType ch) ; помещает объект в стек StacliType pop О ; выталкивает объект из стека , I 1... Глав 1 1. Шаблоны и обработка исключительных туаций 335 Помещение объекта стек template <class StackType> void stack<StaGkType>: :push (StackType ob) { if (tos==SIZE> { cou Стек полон ; return; : .. stck[tos] = ob; tos++; Выталкивание объекта из стека template <class StackType> StackType stack<StackType>: ;pop() { , if (tos==0) { * cou << Стек ст ; return 0; возврат нуля при пустом стеке } tOiS--; return intmain ( ) < Демонстрация ствольных стеков stack<cliar> si, s2; создание двух стеков .int i ; инициализация стеков sl.init;); s2.init(); э1.push (а ] s2.push(х) sl.pushCb ) s2.push(y ) sl.pushCc) s2.push(z) for(i=0; i<3 for(i=0; i<3, cout Из стека 1: sl.popO \n ; .1++) cou Из стека 2: з2.рор() << \n ; Демонстрация стеков со значениями типа double stack<double ii, ds2; создание двух стеков инициализация стеков dsl.initO ; ds2.init();
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |