Классы и операторы интерфейса программы запросов
TextQueryКласс, который читает указанный файл и создает карту поиска. Этот класс предоставляет функцию поиска query(), которая получает строковый аргумент и возвращает объект класса QueryResult, представляющий строки, в которых присутствует ее аргумент (см. раздел 12.3.2)
QueryResultКласс, содержащий результаты вызова функции query() (см. раздел 12.3.2)
QueryКласс интерфейса, указывающий на объект типа, производного от класса Query_base
Query q(s)Связывает объект q класса Query с новым объектом класса WordQuery, содержащим строку s
q1 & q2Возвращает объект класса Query, связанный с новым объектом класса AndQuery, который содержит объекты q1 и q2
q1 | q2Возвращает объект класса Query, связанный с новым объектом класса OrQuery, содержащим объекты q1 и q2
~qВозвращает объект класса Query, связанный с новым объектом класса NotQuery, содержащим объект q
Классы реализации программы запросов
Query_baseАбстрактный класс, базовый для классов запроса
WordQueryКласс, производный от класса Query_base, который ищет указанное слово
NotQueryКласс, производный от класса Query_base, представляющий набор строк, в которых указанный операнд Query отсутствует
BinaryQueryАбстрактный базовый класс, производный от класса Query_base, который представляет запросы с двумя операндами типа Query
OrQueryКласс, производный от класса BinaryQuery, который возвращает набор номеров строк, в которых присутствует хотя бы один из операндов
AndQueryКласс, производный от класса BinaryQuery, который возвращает набор номеров строк, в которых присутствуют оба операнда
Упражнения раздела 15.9.1

Упражнение 15.31. При условии, что s1, s2, s3 и s4 являются строками укажите, какие объекты создаются в следующих выражениях:

(a) Query(s1) | Query(s2) & ~ Query(s3);

(b) Query(s1) | (Query(s2) & ~ Query(s3));

(c) (Query(s1) & (Query(s2)) | (Query(s3) & Query(s4)));

<p>15.9.2. Классы <code>Query_base</code> и <code>Query</code></p>

Начнем реализацию с определения класса Query_base:

// абстрактный класс, являющийся базовым для конкретных типов запроса;

// все члены закрыты

class Query_base {

 friend class Query;

protected:

 using line_no = TextQuery::line_no; // используется в функциях eval()

 virtual ~Query_base() = default;

private:

 // eval() возвращает соответствующий запросу QueryResult

 virtual QueryResult eval(const TextQuery&) const = 0;

 // rep() строковое представление запроса

 virtual std::string rep() const = 0;

};

Перейти на страницу:

Похожие книги