天天看點

48、C++ Primer 4th 筆記,句柄類,繼承,虛函數等的一個綜合例子(未完)

C++ Primer 4th 筆記,句柄類,繼承,虛函數等的一個綜合例子(未完)

文本查詢示例

修改參考中的文本示例,查詢支援與或非聯查。應用句柄類,繼承,虛函數等使程式更加健壯和可擴充。

48、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。

48、C++ Primer 4th 筆記,句柄類,繼承,虛函數等的一個綜合例子(未完)

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>

繼續閱讀