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

这篇博客详细介绍了C++ Primer第五版中第15.9.4节的练习,包括Query.h和Query.cc文件的代码实现,讨论了eval函数如何使用set处理空集情况,以及如何通过修改构造函数和析构函数来使用内置指针。此外,还提出了修改print函数以实现特定功能的方法。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值