C++笔记--模板
2016-06-04 11:36
357 查看
一个string模板
简单的定义
标准库里面有一个base_string模板,很像string模板,所以把前者也是定义为string的同义词:typedef base_string<char>string;
定义一个模板:通常我们是先写一个完整的类,然后再去把它转变为模板类,这样可以避免很多不必要的错误。
定义模板类的成员:不必非得定义在模板类中,可以定义在模板外,但是必须显式的定义他们,他们的参数也是模板化的
通常类模板的名字是不能重载的,如果一个地方定义了一个类模板,它的名字就不能用来去定义一个相同的名字的普通类。
模板实例化:从一个模板类和一个模板参数生成一个类声明的过程;而针对一个特定的模板参数的模板成为专门化。
模板参数:一个模板可以有多个参数,一个模板参数可以定义跟随其后的模板参数。
类型等价,类型检查:与模板参数有关的错误能被检查出来的最早的位置是在:这个模板针对这个参数第一个使用的地方。称为实例化点
函数模板
函数模板的参数:如果不能从模板函数推断出某个模板参数,就只能显示的描述。
函数模板的重载
可以声明同一个名字的多个函数模板。还可以声明同名的函数和函数模板的组合。
重载解析规则
用模板参数描述策略
默认模板参数:只有一些不是很平常的比较算法才需显示给出。
模板专门化:
模板和派生:
一个模板类派生出另一个模板类
参数化和继承
虚函数提供的东西叫做运行时多态,模板提供的东西叫做编译时多态。(如果在这些对象间不需要某种层次性的东西(从属关系),就用模板;如果在编译时无法确定参数类型,就用抽象继承。
模板类里面的复制赋值函数都必=必须是非模板类的,并且成员模板不能是virtual;
简单的定义
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> struct String<C>::srep{ C *s;//到元素的指针 int sz;//元素个数 int n;//引用计数 } template <class C> C String <C> ::read(int i)const{return rep->s[i];}
通常类模板的名字是不能重载的,如果一个地方定义了一个类模板,它的名字就不能用来去定义一个相同的名字的普通类。
模板实例化:从一个模板类和一个模板参数生成一个类声明的过程;而针对一个特定的模板参数的模板成为专门化。
String <char> cs;//这里生成了两个类,cs和js,以及他们的析构和构造函数 void f(){ String<Jchar> js; }
模板参数:一个模板可以有多个参数,一个模板参数可以定义跟随其后的模板参数。
类型等价,类型检查:与模板参数有关的错误能被检查出来的最早的位置是在:这个模板针对这个参数第一个使用的地方。称为实例化点
函数模板
函数模板的参数:如果不能从模板函数推断出某个模板参数,就只能显示的描述。
函数模板的重载
可以声明同一个名字的多个函数模板。还可以声明同名的函数和函数模板的组合。
重载解析规则
用模板参数描述策略
默认模板参数:只有一些不是很平常的比较算法才需显示给出。
模板专门化:
模板和派生:
一个模板类派生出另一个模板类
template <class T> class Vector {}; template <class T>class Vec:public Vector<T>{};
参数化和继承
虚函数提供的东西叫做运行时多态,模板提供的东西叫做编译时多态。(如果在这些对象间不需要某种层次性的东西(从属关系),就用模板;如果在编译时无法确定参数类型,就用抽象继承。
模板类里面的复制赋值函数都必=必须是非模板类的,并且成员模板不能是virtual;
相关文章推荐
- C++日期类的运算符重载和简单边界条件
- 第十五周项目 程序填空(2)自定义普通函数实现add
- C语言内存管理函数
- C++标准转换运算符static_cast
- C++之类的构造函数,不得不学明白的重点
- c++中static_cast是干嘛的啊?
- 2016/6/3 1004. C++:Instance of
- 第十五周项目 程序填空(1) 运用STL函数对象
- C++之单目运算符重载
- C++ inline 函数
- inline在C++中做什么的?
- C++operator用法.
- C++ operator关键字(重载操作符)
- C/C++知识点汇总
- C语言数字转换为字符的问题
- C语言数组
- C语言运算符优先级 之 快速记忆
- c++ 中 const_iterator 和 const vector<>::iterator的区别
- DirectX在VS2015上编译时遇到“无法解析的外部符号 __vsnwprintf”的解决方法及原因
- 欢迎使用CSDN-markdown编辑器