zoukankan      html  css  js  c++  java
  • 48、C++ Primer 4th 笔记,句柄类,继承,虚函数等的一个综合例子(未完)

    C++ Primer 4th 笔记,句柄类,继承,虚函数等的一个综合例子(未完)

    文本查询示例

    修改参考中的文本示例,查询支持与或非联查。应用句柄类,继承,虚函数等使程序更加健壮和可扩展。

    wps_clip_image-30482

    抽象基类Query_base,与查询和或查询具有其他类没有一个性质:有两个操作数,所以我们为之抽象一个BinaryQuery类。

    Query_base的两个关键操作是:

    1eval操作:返回匹配行编号的集合。

    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

    wps_clip_image-6209

    Query q = Query("fiery") & Query("bird") | Query("wind");

    2、实现

    代码示例

    代码示例

    3、C++定义继承层次接口的句柄类很常见,这些类分配并管理指向继承层次中对象的指针,因此能够使用户代码在无须处理指针的情况下获得动态行为。

    4、如果派生类没有定义所继承的纯虚函数,则派生类也是抽象类。

    5、通过引用和指针进行的虚函数调用,在运行时基于引用和指针所绑定的对象而确定。

    参考

    [1] 查询文本示例

    http://www.cnblogs.com/mydomain/archive/2011/03/20/1989652.html

    [2] 句柄类

    http://www.cnblogs.com/mydomain/archive/2011/03/29/1999120.html

  • 相关阅读:
    导出报ora-31634、ora-31664
    A significant part of sql server process memory has been paged out
    解决ora-02429:无法用于删除强制唯一/主键的索引
    更改数据库表中有数据的字段类型NUMERIC(18,2)为NUMERIC(18,6)
    GHOST CLEANUP Process
    oracle查看执行计划explain plan FOR
    ORA-01502: 索引或这类索引的分区处于不可用状态
    mysql 游标循环,嵌套游标循环
    MSSQL FOR XML PATH ('')用法
    Mysql CHARINDEX用法
  • 原文地址:https://www.cnblogs.com/mydomain/p/2539851.html
Copyright © 2011-2022 走看看