Программирование >>  Инициализация объектов класса, структура 

1 ... 303 304 305 [ 306 ] 307 308 309 ... 395


inline void UserQuery::

evalRParen()

if ( paren < current op.size() )

Query *poperand = query stack.top(); query stack.pop();

Query *pop = current op.top(); current op.pop(); pop->add op( poperand ); query stack.push( pop ); }

в стек query stack:

Операция evalWord() выполняет следующие действия. Она ищет указанное слово в отображении word map взятых из файла слов на векторы позиций. Если слово найдено, берется его вектор позиций и в хипе посредством конструктора с двумя параметрами создается новый объект NameQuery. В противном случае объект порождается с помощью конструктора с одним параметром. Если число элементов в стеке current op меньше либо равно числу встреченных ранее скобок, то нет неполного оператора, ожидающего операнда типа NameQuery, поэтому новый объект помещается в стек query stack. Иначе из стека current op извлекается неполный оператор, к которому с помощью виртуальной функции add op() присоединяется операнд NameQuery, после чего ставший полным оператор помещается в стек query stack:

При обнаружении закрывающей скобки вызывается операция evalRParen(). Если число активных левых скобок больше числа элементов в стеке current op, то ничего не происходит. В противном случае выполняются следующие действия. Из стека query stack извлекается текущий еще не присоединенный к оператору операнд, а из стека current op - текущий неполный оператор. Вызывается виртуальная функция add op() класса Query, которая их объединяет. И наконец полный оператор помещается



inline void UserQuery::

evalWord( const string Sery )

NameQuery *pq;

loc *ploc;

if ( ! word map->count( query )) pq = new NameQuery( query );

else {

ploc = ( * word map ) [ ery ] ; new NameQuery( query, *ploc );

if ( current op.size() <= paren ) query stack.push( pq );

else {

Query *pop = current op.top(); current op.pop(); pop->add op( pq ); query stack.push( pop ); }

Упражнение 17.21

Напишите деструктор, копирующий конструктор и копирующий оператор присваивания для класса UserQuery.

Упражнение 17.22

Напишите функции print() для класса UserQuery. Обоснуйте свой выбор того, что она выводит.

17.8. Соберем все вместе

Функция miain() для нашего приложения текстового поиска выглядит следующим

#include TextQuery.h

int main() {

TextQuery tq;

tq.build up text(); tq.query text();

образом:

Функция-член build text miap() - это не что иное, как переименованная функция doit() из раздела 6.14:



inline void TextQuery::

build text map()

retrieve text(); separate words(); filter text(); suffix text(); strip caps(); build word map();

Функция-член query text() заменяет одноименную функцию из раздела 6.14. В первоначальной реализации в ее обязанности входили прием запроса от пользователя и вывод ответа. Мы решили сохранить за query text() эти задачи, но реализовать ее но-другому19:

19 Полный текст программы можно найти на FTP-сайте издательства Addison-Wesley по адресу, указанному на задней стороне обложки.



1 ... 303 304 305 [ 306 ] 307 308 309 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика