有二个类, Query.h 和 NotQuery.h 我应该如何去组织头文件?

xiaofengzzz 2009-08-25 11:50:56
有二个类, 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
...全文
86 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjw6861982 2009-08-25
  • 打赏
  • 举报
回复
顶你一下
candeabc123 2009-08-25
  • 打赏
  • 举报
回复
Up
xiaofengzzz 2009-08-25
  • 打赏
  • 举报
回复
怎么一发上CSDN我就想到办法了~

白白想了一上午的问题,

难道一碰到CSDN, 和高手们靠近了,脑袋就好使了!!!!

xiaofengzzz 2009-08-25
  • 打赏
  • 举报
回复
Query operator~(const Query &temp)
{
return new NotQuery(temp);
}

重载 operator~ 函数内容,
mstlq 2009-08-25
  • 打赏
  • 举报
回复
祝贺楼主找到解决办法^_^
  • 打赏
  • 举报
回复
接分吧,神保佑你

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧