|
C++Тогда olist сможет манипулировать объектами любого класса, производного от olink. Буква "o" в названиях стоит для того, чтобы напоминать вам, что объект может находиться одновременно только в одном списке olist: struct olink (* olink* next; *); Класс olist очень напоминает класс slist. Отличие состит в том, что пользователь класса olist манипулирует объектми класса olink непосредственно: class olist (* olink* last; public: void insert(olink* p); void append(olink* p); olink* get(); // ... *); Мы можем вывести из класса olink класс name: class name : public olink (* // ... *); Теперь легко сделать список, который можно использовать без накладных расходов времени на размещение или памяти. Объекты, помещаемые в olist, теряют свой тип. Это ознчает, что компилятор знает только то, что они olink'и. Првильный тип можно восстановить с помощью явного преобразовния типа объектов, вынутых из olist. Например: void f() (* olist ll; name nn; ll.insert( amp;nn); // тип amp;nn потерян name* pn = (name*)ll.get(); // и восстановлен *) Другой способ: тип можно восстановить, выводя еще один класс из olist для обработки преобразования типа: class onlist : public olist (* // ... name* get() (* return (name*)olist::get(); *) *); Имя name может одновременно находиться только в одном olist ...» | Код для вставки книги в блог HTML
phpBB
текст
|
|