有二个类, Query.h 和 NotQuery.h 我应该如何去组织头文件?
有二个类, Query.h 和 NotQuery.h 我应该如何去组织头文件?
如果我在Query.h 中定义 friend Query operator~(const Query &); 就会报错.
NotQuery.h 和 WordQuery.h 从 Query_base.h续承.
Query.h打算做成句柄类. TextQuery.h 是查询功能类
请各位高手指点,谢谢! //此题为 C++ primer 第4版 15章 面向对象编程 15.9的例题.
-------------------------------------------------------------------------
//Query.h
#ifndef QUERY_H
#define QUERY_H
#include "TextQuery.h"
#include "Query_base.h"
#include "WordQuery.h"
//#include "NotQuery.h"
#include <set>
#include <iostream>
class Query
{
friend Query operator~(const Query &);
public:
Query(const std::string &word): q(new WordQuery(word)), use(new size_t(1)) {}
Query(const Query &temp): q(temp.q), use(temp.use) {++*use;}
~Query() {decr_use();}
Query &operator=(const Query &);
std::set<size_t> eval(const TextQuery &temp) const {return q->eval(temp);}
std::ostream &display(std::ostream &os) {return q->display(os);}
private:
Query(Query_base *temp): q(temp), use(new size_t(1)) {}
Query_base *q;
size_t *use;
void decr_use()
{
if(--*use = 0)
{
delete q;
delete use;
}
}
};
#endif
-------------------------------------------------------------------------
//NotQuery.h
#ifndef NOTQUERY_H
#define NOTQUERY_H
#include "TextQuery.h"
#include "Query_base.h"
#include <iostream>
#include <set>
#include "Query.h"
class NotQuery: public Query_base
{
friend Query operator~(const Query &);
NotQuery(Query q): query(q) {}
std::set<size_t> eval(const TextQuery &) const;
std::ostream &display(std::ostream &os = std::cout) const
{return os << "~()";}
const Query query;
};
std::set<size_t> NotQuery::eval(const TextQuery &temp) const
{
std::set<size_t> set_temp = query.eval(temp);
std::set<size_t> ret_lines;
for (size_t i = 0; i != temp.size(); ++i)
{
if (set_temp.find(i) == set_temp.end())
ret_lines.insert(i);
}
return ret_lines;
}
#endif