C++ Primer(第五版) 15.9.4节练习

15.39    Query.h文件代码:

#ifndef	QUERY_H
#define	QUERY_H

#include <iostream>
#include "TextQuery.h"
#include "QueryResult.h"

using namespace std;

class Query;
Query operator~(const Query&);
Query operator|(const Query&, const Query&);
Query operator&(const Query&, const Query&);

class Query_base {
	friend class Query;
protected:
	using line_no = TextQuery::line_no;
	virtual ~Query_base() = default;
private:
	virtual QueryResult eval(const TextQuery&) const = 0;
	virtual string rep() const = 0;
};

class Query {
	friend Query operator~(const Query&);
	friend Query operator|(const Query&, const Query&);
	friend Query operator&(const Query&, const Query&);
public:
	Query(const string&);
	QueryResult eval(const TextQuery &t) const { return q->eval(t); }
	string rep() const { return q->rep(); }
private:
	Query(shared_ptr<Query_base> query): q(query) { }
	shared_ptr<Query_base> q;
};

ostream& operator<<(ostream &, const Query &);

class WordQuery: public Query_base {
	friend class Query;
	WordQuery(const string &s): query_word(s) { }
	QueryResult eval(const TextQuery &t) const 
				{ return t.query(query_word); }
	string rep() const { return query_word; }
	string query_word;
};

class NotQuery: public Query_base {
	friend Query operator~(const Query&);
	NotQuery(const Query &q): query(q) { }
	string rep() const { return "~(" + query.rep() + ")"; };
	QueryResult eval(co
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值