C 筆記 15 8 文字查詢再探

2021-10-09 09:17:04 字數 3564 閱讀 1664

將層次關係隱藏於介面類中

//這是乙個抽象基類,具體的查詢型別從中派生,所有成員都是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...