有二个类, 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
如果我在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
...全文
相关推荐
一些头文件(包括devioctl.h、ntdddisk.h、ntddstor.h)
这个资源包中包含一些与windows驱动开发相关的头文件,如devioctl.h、ntdddisk.h、ntddstor.h等,好像这些都与winddk相关。
mysql头文件包括typelib.h,mysql.h等
mysql头文件包括typelib.h,mysql.h等,全打包。
vue router使用query和params传参的使用和区别
本篇文章主要介绍了vue router使用query和params传参的使用和区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
MYSQL库文件和头文件
Mysql 动态库和头文件所有资料。可以直接在工程中使用。
mysql 5.5版 头文件(mysql.h等)
这些都为mysql5.5版的头文件,包含mysql.h等内容!


新手乐园
