-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQuery.cpp
More file actions
45 lines (34 loc) · 889 Bytes
/
Query.cpp
File metadata and controls
45 lines (34 loc) · 889 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#ifndef QUERY_CPP_
#define QUERY_CPP_
#include "Query.h"
#include "AndQuery.h"
#include "NotQuery.h"
#include "OrQuery.h"
#include "WordQuery.h"
#include <memory>
using namespace std;
Query::Query(const string & s)
{
word = s;
//pbase应该指向一个纯粹的WordQuery
//WordQuery 接受string为构造函数
pbase = make_shared<WordQuery>(s);
}
Query operator~(const Query & q)
{
//创建一个shared_ptr<NotQuery>,调用了NotQuery的构造函数
//NotQuery(const Query & )
//构造NotQuery时,内部指针(也是shared_ptr)指向了q
//最终重载运算符构建了新个query
//query->base 指向新的NotQuery对象
return Query(make_shared<NotQuery>(q));
}
Query operator&(const Query & l, const Query & r)
{
return Query(make_shared<AndQuery>(l,r));
}
Query operator|(const Query & l, const Query & r)
{
return Query(make_shared<OrQuery>(l,r));
}
#endif