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:父类的指针指向子类?
模板的一个遗留问题:成员模板。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义