C++ Primer 4th 筆記,句柄類,繼承,虛函數等的一個綜合例子(未完)
文本查詢示例
修改參考中的文本示例,查詢支援與或非聯查。應用句柄類,繼承,虛函數等使程式更加健壯和可擴充。

抽象基類Query_base,與查詢和或查詢具有其他類沒有一個性質:有兩個操作數,是以我們為之抽象一個BinaryQuery類。
Query_base的兩個關鍵操作是:
(1)eval操作:傳回比對行編号的集合。
(2)列印查詢。
通過定義句柄類(handle class),隐藏繼承層次,使使用者代碼和類代碼都簡潔,使用者代碼隻能間接操作Query_base對象。
1、設計重述
TextQuery
讀指定檔案并建立數得上映射的類,該類提供 query_text 操作,該操作接受 string 實參并傳回一個 set,儲存出現實參的行的編号。
Query_base
查詢類的抽象基類。
Query
使用者計數的句柄類,它指向 Query_base 派生類型的對象。
WordQuery
從 Query_base 派生的類,查找給定單詞。
NotQuery
從 Query_base 派生的類,傳回操作數不出現的行的編号集合。
BinaryQuery
從 Query_base 派生的抽象基類類型,表示帶兩個 Query 操作數的查詢。
OrQuery
從 BinaryQuery 派生的類,傳回兩個操作數出現的行編号集的并集。
AndQuery
從 BinaryQuery 派生的類,傳回兩個操作數出現的行編号集的交集。
q1 & q2
傳回Query對象,該Query 對象綁定到儲存 q1 和 q2 的新AndQuery 對象。
q1 | q2
傳回Query對象,該 Query 對象綁定到儲存 q1 和 q2 的新OrQuery 對象。
~q
傳回 Query 對象,該 Query 對象綁定到儲存 q 的新 NotQuery對象。
Query q(s)
将 Query q 綁定到儲存 string s 的新 WordQuery 對象。
需要認識到的一點是:much of the work in this application consists of building objects to represent the user's query。
Query q = Query("fiery") & Query("bird") | Query("wind");
2、實作
代碼示例
3、C++定義繼承層次接口的句柄類很常見,這些類配置設定并管理指向繼承層次中對象的指針,是以能夠使使用者代碼在無須處理指針的情況下獲得動态行為。
4、如果派生類沒有定義所繼承的純虛函數,則派生類也是抽象類。
5、通過引用和指針進行的虛函數調用,在運作時基于引用和指針所綁定的對象而确定。
參考
[1] 查詢文本示例
<a href="http://www.cnblogs.com/mydomain/archive/2011/03/20/1989652.html">http://www.cnblogs.com/mydomain/archive/2011/03/20/1989652.html</a>
[2] 句柄類
<a href="http://www.cnblogs.com/mydomain/archive/2011/03/29/1999120.html">http://www.cnblogs.com/mydomain/archive/2011/03/29/1999120.html</a>