將層次關係隱藏於介面類中
//這是乙個抽象基類,具體的查詢型別從中派生,所有成員都是private的
class
query_base
;//這是乙個管理query_base繼承體系的介面類
class
query
string rep()
const
private
:query
(shared_ptr query):q
(query)
shared_ptr q;};
//query的輸出運算子
ostream&
operator
<<
(ostream&os,
const query& query)
class
wordquery
:public query_base
//具體的類:wordquery將定義所有繼承而來的純虛函式
queryresult eval
(const textquery &t)
const
string rep()
const
private
: string query_word;};
//接受string的wordquery建構函式
inline query::
query
(const string& s):q
(new
wordquery
(s))
class
notquery
:public query_base
//具體的類:notquery將定義所有繼承而來的純虛函式
queryresult eval
(const textquery&
)const
; string rep()
const
query query;};
inline query operator~(
const query&operand)
//抽象基類,儲存兩個運算物件的查詢型別所需的資料
class
binaryquery
:public query_base
//抽象類:binaryquery不定義eval
string rep()
const
query lhs, rhs;
string opsym;};
class
andquery
:public binaryquery
//具體的類:andquery繼承了rep並且定義了其他純虛函式
queryresult eval
(const textquery&
)const;}
;inline query operator&(
const query& lhs,
const query& rhs)
class
orquery
:public binaryquery
//具體的類:andquery繼承了rep並且定義了其他純虛函式
queryresult eval
(const textquery&
)const;}
;inline query operator|(
const query& lhs,
const query& rhs)
//返回運算物件查詢結果set的並集
queryresult andquery::
eval
(const textquery& text)
const
//返回運算物件查詢結果set的交集
queryresult orquery::
eval
(const textquery& text)
const
//返回運算物件的結果set不存在的文字行
queryresult notquery::
eval
(const textquery& text)
const
return
queryresult
(rep()
, ret_lines, result.
get_file()
);}int
main
(int argc,
char
** ar**)
textquery.h
#pragma once
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
//儲存查詢結果
class
queryresult
set::iterator begin()
set::iterator end()
shared_ptr>
&get_file()
private
: string sought;
shared_ptr> lines;
shared_ptr> file;};
ostream&
print
(ostream& os,
const queryresult& qr)
return os;
}//文字查詢類
class
textquery
;textquery::
textquery
(ifstream & is)
:file
(new vector)}
}queryresult textquery::
query
(const string& sought)
const
void
runqueried
(ifstream &infile)
}
C 筆記 IO庫再探
標準庫定義了一組操縱符,用來修改流的格式狀態。乙個操縱符是乙個函式或者物件,會影響流的狀態,並能用作輸入或輸出運算子的運算物件。例如 endl 在使用endl時,就像是將它寫到流中去。但是endl實際上是乙個操作 它輸出乙個換行,並重新整理緩衝區。當操縱符改變流的狀態時,會影響該流的後續操作 例如 ...
C 程式設計 48 文字控制項複習筆記
1 文字控制項 1 標籤label 2 按鈕button 3 文字框textbox 4 有格式文字richtextbox 2 label system.windows.forms.label 設定 屬性面板,size指整個窗體外邊框的大小 clientsize指窗體內邊框大小 random min,...
c primer習題10 6 文字查詢程式
ifndef textquery h define textquery h include include include include include includeusing namespace std class text query setrun query const string co...