C++笔记--模板
- 一个string模板
- 简单的定义
- template <class C>//模板形式,C是一个类型名字,不一定是某个类的名字
- class String{
- struct srep;
- srep *rep;
- public:
- String();
- String(const C*);
- String(const String&);
- C read(int i)const;
- };
- String <char > cs;//这些是使用的方法,模板的一些定义
- String <unsigned char> us;
- String <wchar_t>ws;
- class Jchar{
- };
- String <Jchar>js;
标准库里面有一个base_string模板,很像string模板,所以把前者也是定义为string的同义词:typedef base_string<char>string;
- template <class C>//模板形式,C是一个类型名字,不一定是某个类的名字
- 定义一个模板:通常我们是先写一个完整的类,然后再去把它转变为模板类,这样可以避免很多不必要的错误。
- 定义模板类的成员:不必非得定义在模板类中,可以定义在模板外,但是必须显式的定义他们,他们的参数也是模板化的
- template <class C> struct String<C>::srep{
- C *s;//到元素的指针
- int sz;//元素个数
- int n;//引用计数
- }
- template <class C> C String <C> ::read(int i)const{return rep->s[i];}
- template <class C> struct String<C>::srep{
- 通常类模板的名字是不能重载的,如果一个地方定义了一个类模板,它的名字就不能用来去定义一个相同的名字的普通类。
- 定义模板类的成员:不必非得定义在模板类中,可以定义在模板外,但是必须显式的定义他们,他们的参数也是模板化的
- 模板实例化:从一个模板类和一个模板参数生成一个类声明的过程;而针对一个特定的模板参数的模板成为专门化。
-
- String <char> cs;//这里生成了两个类,cs和js,以及他们的析构和构造函数
- void f(){
- String<Jchar> js;
- }
- String <char> cs;//这里生成了两个类,cs和js,以及他们的析构和构造函数
-
- 模板参数:一个模板可以有多个参数,一个模板参数可以定义跟随其后的模板参数。
- 类型等价,类型检查:与模板参数有关的错误能被检查出来的最早的位置是在:这个模板针对这个参数第一个使用的地方。称为实例化点
- 简单的定义
- 函数模板
- 函数模板的参数:如果不能从模板函数推断出某个模板参数,就只能显示的描述。
- 函数模板的重载
- 可以声明同一个名字的多个函数模板。还可以声明同名的函数和函数模板的组合。
-
- 重载解析规则
-
- 重载解析规则
- 用模板参数描述策略
- 默认模板参数:只有一些不是很平常的比较算法才需显示给出。
- 模板专门化:
- 模板和派生:
- 一个模板类派生出另一个模板类
-
- template <class T> class Vector {};
- template <class T>class Vec:public Vector<T>{};
- template <class T> class Vector {};
-
- 参数化和继承
- 虚函数提供的东西叫做运行时多态,模板提供的东西叫做编译时多态。(如果在这些对象间不需要某种层次性的东西(从属关系),就用模板;如果在编译时无法确定参数类型,就用抽象继承。
- 模板类里面的复制赋值函数都必=必须是非模板类的,并且成员模板不能是virtual;
C++笔记--模板的更多相关文章
- 《深入浅出WPF》笔记——模板篇
原文:<深入浅出WPF>笔记--模板篇 我们通常说的模板是用来参照的,同样在WPF中,模板是用来作为制作控件的参照. 一.认识模板 1.1WPF菜鸟看模板 前面的记录有提过,控件主要是算法 ...
- 用html和css轻松实现康奈尔笔记(5R笔记)模板
缘起 人家都说康奈尔笔记法,很好用呢,能抵抗遗忘曲线,让你的笔记事半功倍,有兴趣的同学自行百度哈. 网上有很多现成的模板,下载下来之后吧,看着好像在上面写英文可能更方便一点,行距很小,而且还有网址在上 ...
- Django笔记 —— 模板高级进阶
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- Django笔记 —— 模板
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- django项目班笔记-模板抽取
目录 一.将前端静态文件放置到项目文件目录 二.模板设置 三.将静态文件拖放到项目对应目录 四.检查HTML文件中的应用是否自动更改了 4.1 文件引用没有改变的解决方法 4.2 设置static文件 ...
- 学习笔记——模板模式Template
模板模式,主要是利用多态来实现具体算法和父类逻辑的松耦合.父类中TemplateMethod内部定义了相应的算法操作顺序,子类负责实现相应的具体实现. 举例: 项目中曾遇到过一个需求,叫做高级价格体系 ...
- django学习笔记-模板层
模板层 将Python嵌入到HTML中. 模板简介 将HTML硬解码到视图并不是那么完美原因如下: 对页面设计时也需要对python代码进行相应的修改,模板可以不就行python代码修改的情况下变更设 ...
- <玩转Django2.0>读书笔记:模板和模型
1. 模板内置标签 Django常用内置标签 标签 描述 {% for %} 遍历输出变量的内容 {% if %} 对变量进行条件判断 {% csrf_token %} 生成csrf_token标签, ...
- es6学习笔记--模板字符串
这几天简单看了一下深入浅出es6这本书,感觉特实用,学习了一个新特性---模板字符串在项目开发中,拼接字符串是不可缺少的,动态创建dom元素以及js操作数据都要拼接字符串,在es6出来之前,我们都通常 ...
- C++ Primer 笔记——模板与泛型编程
1.编译器用推断出的模板参数来为我们实例化一个特定版本的函数. 2.每个类型参数前必须使用关键字class或typename.在模板参数列表中,这两个关键字含义相同,可以互换使用,也可以同时使用. t ...
随机推荐
- UVALive - 5031 Graph and Queries (并查集+平衡树/线段树)
给定一个图,支持三种操作: 1.删除一条边 2.查询与x结点相连的第k大的结点 3.修改x结点的权值 解法:离线倒序操作,平衡树or线段树维护连通块中的所有结点信息,加个合并操作就行了. 感觉线段树要 ...
- Git 常用命令详解(三)
转自:http://www.cnblogs.com/1-2-3/archive/2010/07/18/git-commands.html
- 2017.10.4北京清北综合强化班DAY4
财富(treasure) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有n个小伙伴.每个小伙伴有一个身高hi. 这个游戏是这样的,LYK生活的环境是以 ...
- C# Winform中窗体的美化—— 用IrisSkin轻松实现换肤功能
今天经前辈提醒才知道winform窗体还有美化工具,呵呵,不得不说,孤陋寡闻了.下面总结一下irisskin2的使用步骤和遇到的问题及解决办法. 1.网址:http://www.pc6.com/sof ...
- 编译cef 2526
fetch --nohooks chromium cd /path/to/chromium/src# git checkout -b 51.0.2704.103 refs/tags/51.0.2704 ...
- phpstorm win/mac git配置 破解
http://blog.csdn.net/fenglailea/article/details/53350080 phpstorm中git配置教程: http://blog.csdn.net/knig ...
- Day3-Python基础3--函数参数及调用
一.return返回值 return的两个作用: 1)需要用一个变量来接受程序结束后返回的结果 2)它是作为一个结束符,终止程序运行 def test(): print("我是return前 ...
- c++ 插入排序算法
第一.算法描述 直插排序很容易理解,在我们打扑克牌的时候,每一次摸完牌,都会按数字大小或者花色,插入到合适的位置,直到摸完最后一张牌,我们手中的牌已经按大小顺序排列好了.这整个过程就是一个 ...
- JAVA基础知识(16)-----Integer
Integer对象数字格式的字符串转成基本数据类型的方法:1:将该字符串封装成了Integer对象,并调用对象的方法intValue();2:使用Integer.parseInt(numstring) ...
- highcharts图表的图例legend
一.将图例Legend放于图表右侧1.设置chart的marginRight属性值:chart: { marginRight: 120}2.设置legend图例属性值如下 legend: { alig ...