Язык программирования C++. Вводный курс




Определение производных классов - часть 2


Простейший способ вычислить все это – создать единственный разделяемый всеми объектами вектор позиций, который содержит пары (строка, колонка) для каждого слова в тексте (полную реализацию мы рассмотрим в разделе 17.5, когда будем обсуждать функцию eval()

класса NotQuery). Так или иначе, этот член мы объявим статическим для NotQuery.

Вот определение класса NotQuery (и снова рассмотрение конструкторов, деструктора и копирующего оператора присваивания отложено):

class NotQuery : public Query {

public:

     // ...

     // альтернативный синтаксис: явно употреблено ключевое слово virtual

     // переопределение Query::eval()

           virtual void eval();

     // функция доступа для чтения

           const Query *op() const { return _op; }

           static const vector< location > * all_locs() {

                                     return _all_locs; }

protected:

           Query *_op;

           static const vector< location > *_all_locs;

};

Классы AndQuery и OrQuery

представляют бинарные операции, у которых есть левый и правый операнды. Оба операнда могут быть объектами любого из производных классов, поэтому мы определим соответствующие члены как указатели на тип Query. Кроме того, в каждом классе нужно переопределить виртуальную функцию eval(). Вот начальное определение OrQuery:

class OrQuery : public Query {

public:

     // ...

           virtual void eval();

           const Query *rop() const { return _rop; }

           const Query *lop() const { return _lop; }

protected:

           Query *_lop;

           Query *_rop;

};

Любой объект AndQuery

должен иметь доступ к числу слов в каждой строке. В противном случае при обработке запроса AndQuery мы не сможем найти соседние слова, расположенные в двух смежных строках. Например, если есть запрос:

tell && her && magical

то нужная последовательность находится в третьей и четвертой строках:

like a fiery bird in flight. A beautiful fiery bird, he tells her,




Содержание  Назад  Вперед