C++模版————复习

来源:互联网 发布:一组数据的range怎么求 编辑:程序博客网 时间:2024/05/20 21:59
 

模版的复习:< > class typename
1. template <类型/整型常量> :模版是参数化的类/函数 ----->其<>中一般放class typename int 这3个关键字。
2.模版底层其实是用typeid来探测其实际的类型。
3.模版声明都是防止 类/函数的 前面: template <class T> class abc{};   template <class T> void abc(){} template<class T> void arry<T>::getAbc(){}。
4.重大好消息: 现在我们可以通过模版,来实现“不限长度的数组的传递了,即仅仅把数组名作为唯一形参的函数有了”=====》 模版+数组引用
    实现机制是: 通过模版的自动探知类型的功能,来探知该数组的大小:如下
template <class Arry,int size> void haha(Arry (&a)[size]){ for(size....)cout<<a[i]}   这样即可。哈哈
5.template <class T,int size> arry<T,size>& arry<T,size>::operator=(const arry& obj)
为什么上面的语句之前要用到<>,而之后不要用到<>呢? 因为:之前没有arr<T,size>::来修饰,限定域,之后有了,就可以不加了。主要用于:类的外部函数的实现
6.其实模版,经过编译运行之后,是把其修饰的函数或者是类,的名称改掉,把模版相关的类型都统一添加到了名称一部分中去了:如:array====>编译后:5arrayIiLiIoEE
7.使用了模版,就要考虑到各类的兼容性。使用T()这个临时变量来构造初始化是不错的选择。是东东更兼容。
8.默认值:函数不可以(因为函数本来就可以自动探测其类型,根本就无需),类可以有默认值。(同样遵循由右至左的默认值给与顺序),即使使用了默认值,arry<>这个尖括号也必须存在

9.要懂得这个的使用: if (typeid(data) != typeid(char) ) 来判断是否类型相等。 

10.继承:子类的模版参数中必须存在父类的所有参数,以便在构造子类的时候,子类会去构造父类。呵呵: son:public father<B>     son(const B& dataB): father<B>(dataB)

11.作业:实现单链表使用模版实现一下。

 

原创粉丝点击