-
指向函数的指针
- typedef bool (*cmpFcn)(const string &, const string &);
- 函数指针只能通过同类型的函数或函数指针或0值常量表达式进行初始化或赋值
-
关联容器
- pair类型
- map类型
- set类型
- multimap类型
-
multiset类型
- 允许一个键对应多个实例
-
管理指针
-
定义智能指针类
- 使用计数(引用计数)
- 指针成员提供值语义
- 指针型句柄类
-
复制未知类型
-
定义虚函数clone()
-
存在是为了生成类对象的新副本
- 抽象类不需要定义clone()
-
比较两个Sales_item对象
- 定义operator<
- 附加的实参传给stable_sort
-
定义容器对象
-
定义比较函数
- inline bool compare(const Sales_item &lhs,const Sales_item &rhs)
-
定义类型别名
- typedef bool (*Comp)(const Sales_item&, const Sales_item&);
-
定义multiset
- std::multiset<Sales_item,Comp>items(compare);
-
句柄类
-
实例1
-
Sales_item类(句柄类,用于管理指针)
-
第一个构造函数:默认构造函数创建未绑定的Sales_item对象
- Sales_item():p(0),use(new std::size_t(1))
-
第二个构造函数:接受一个对象,并将句柄与其关联
- Sales_item(const Item_base& item):p(item.clone()),use(new std::size_t(1))
-
Item_base类(不使用折扣策略基类)
-
Sales_item类(句柄类,用于管理指针)
- 第一个构造函数:默认构造函数创建未绑定的Sales_item对象
- Sales_item():p(0),use(new std::size_t(1))
- 第二个构造函数:接受一个对象,并将句柄与其关联
- Sales_item(const Item_base& item):p(item.clone()),use(new std::size_t(1))
- 计数器 use
- 每个基类增加虚函数clone()
-
Basket类(带比较器的关联容器)
- 定义容器对象
- 定义比较函数
- inline bool compare(const Sales_item &lhs,const Sales_item &rhs)
- 定义类型别名
- typedef bool (*Comp)(const Sales_item&, const Sales_item&);
- 定义multiset
- std::multiset<Sales_item,Comp>items(compare);
- 本质:用户不必管理句柄指向的对象(即Item_base,Bull_item,Lds_item类对象),Sales_item类将完成这部分工作。当用户通过Sales_item类对象调用函数时,将获得多态行为
-
Disc_item抽象基类(实行折扣率和可实行折扣策略的数量)
- Bulk_item类(批量购买折扣类)
- Lds_item类(有限折扣类)
-
Disc_item抽象基类(实行折扣率和可实行折扣策略的数量)
- Bulk_item类(批量购买折扣类)
- Lds_item类(有限折扣类)
- 计数器 use
- 每个基类增加虚函数clone()
-
Basket类(带比较器的关联容器)
-
定义容器对象
- 定义比较函数
- inline bool compare(const Sales_item &lhs,const Sales_item &rhs)
- 定义类型别名
- typedef bool (*Comp)(const Sales_item&, const Sales_item&);
- 定义multiset
- std::multiset<Sales_item,Comp>items(compare);
- 本质:用户不必管理句柄指向的对象(即Item_base,Bull_item,Lds_item类对象),Sales_item类将完成这部分工作。当用户通过Sales_item类对象调用函数时,将获得多态行为
-
实例2
- eval虚函数
-
Query(句柄类)
- 三个重载重载操作符
- 构造函数(动态分配新Query_base对象)
- 不定义解引用,箭头操作符
- 计数器
- WordQuery
-
Query_base(抽象基类)
- TextQuery
- display虚函数
- eval虚函数
-
Query(句柄类)
- 三个重载重载操作符
- 构造函数(动态分配新Query_base对象)
- 不定义解引用,箭头操作符
- 计数器
- WordQuery
- NotQuery
-
BinaryQuery(抽象类)
- AnyQuery
- OrQuery
- NotQuery
- TextQuery
-
BinaryQuery(抽象类)
- AnyQuery
- OrQuery
- display虚函数
-
泛型编程
-
模板形参作用域
- 常规名字屏蔽规则
-
使用限制
- 不能在模板内部重用
- 模板形参的名字只能在同一模板形参表中使用一次
-
模板声明
- 可以只声明不定义
- 同一模板的声明和定义中,模板形参的名字不必相同
-
模板类型形参
-
typename与class区别
- typename直观但是后加入
-
作为类型
- 在成员名前加上关键字typename::
-
实例化
- 类模板的形参是必须的
- 函数模板实例化