4-9 智能指针、仿函数、namespace、类模板、函数模板、成员模板
1 两种特殊的类:像指针的类、像函数的类
shared_ptr智能指针:比一般的指针更聪明,2.0之前有个auto pointer

1)智能指针是模板
2)智能指针里面肯定有个指针,px;
3)初始化的方法要注意一下,
一般:Foo *sp;
智能指针:shared_ptr<Foo> sp(new Foo); // 模板中写Foo类名,sp没有*,new一个Foo传给构造函数。这个new的值,可以在析构函数中释放。
4)sp->method()中的“sp ->”会变成px,变成pxmethod()了?解释:箭头符号会继续作用下去
5)如果你是C++新手,强烈建议使用库
链表迭代器智能指针:

1)迭代器里真正的指针就是link_type,是一个指向结点的指针

data是什么类型的?模板的类型。
List<Foo>::iterator ite; // ite就是一个迭代器,是一个智能指针
注意操作符*和->的实现和上一例子的区别,因为这里又包装了一层node,node里面的data才是真正的数据,所以这里的这两个符号重载有些不一样。
2 让一个类像函数(仿函数),重载()

pair:一只鸟和一条鱼合成一个pair也行
上面这三个类型,不是标准库中的,在glue c?里有
灰色的部分其实是这样的,继承了另一个class:


还有加、减、等于、小于仿函数。

仿函数都会继承一些奇怪的父类,这些父类sizeof为0(因为一些原因,可能是1),只有typedef,
作用:这里不提
3 namespace:
在一个测试文件中用namespace把好几个函数包起来。
在一个main中加入100个测试程序。

4 类模板(比面向对象简单)、函数模板、成员模板


函数模板在使用时不必指明类型,调用时编译器就可以退出来参数类型。

黄色部分在模板里,而它自己又是一个模板,以下为实例:

可以,反之不可以。这里有点看不懂。

up-cast:父类的指针指向子类?
模板的一个遗留问题:成员模板。

浙公网安备 33010602011771号