1、什么是模板?  template<class T1,class T2,.....>
类属————类型参数化,又称参数模板使得程序可以从逻辑功能上抽象,把被处理的对象(数据)的类型作为参数传递。【1】函数模板
#include <iostream>
using namespace std;
//函数模板
template <class T1,class T2>
void show(T1 a,T2 b)
{cout<<a<<"+"<<b<<endl;
}int main()
{
//自动类型推导show(111,2.222);
//具体类型调用show<int,float>(111,2.222); //类型参数化
}
【注意】函数模板可以像普通函数一样被重载函数模板不允许自动类型的转换,普通函数可以进行自动类型转换
【C++编译器怎么实现函数模板的?】函数模板实现本质探究!——编译器并不是把函数模板处理成能够处理任意类型的函数--编译器从函数模板通过具体类型产生不同的函数--编译器会对函数模板进行两次编译--在调用的地方对参数替换后的代码进行编译
换句话说:只不过是C++编译器帮我们写出了自己想要的函数而已!【2】类模板
知识1.类模板遇上继承
#include <iostream>
using namespace std;
//类模板
template <class T1,class T2>
class A
{
public:void show(T1 a,T2 b);
};
template <class T1,class T2>
void A<T1,T2>::show(T1 a,T2 b)
{cout<<a<<"+"<<b<<endl;
}
//继承类模板的语法:类A必须类型具体化为A<int,int>
class B:public A<int,int>
{
public:void show_B(int a,int b);
};
template <class T1,class T2>
void B::show_B(int a,int b)
{cout<<a<<"+"<<b<<endl;
}
int main()
{A<int,char> a; //必须把类模板具体化类型后,才能实例化a.show(1,'A');//继承类模板B b;b.show_B(100,200);
}
知识2:类模板遇上友元函数在类模板中,如果有友元函数,那么该友元函数的实现必须在类中进行(如果在类外实现不管用何种方式,都会编译错误)。
#include <iostream>
using namespace std;template <class T>
class Complex
{
public:
//类的成员函数Complex(T r=0, T i=0);void print();
//类的友元函数friend Complex operator+(const Complex<T> &c1,const Complex<T> &c2){return Complex<T>(c1.real+c2.real,c1.imag+c2.imag);}friend ostream& operator<<(ostream& out,const Complex& c){out<<c.real<<"+"<<c.imag;return out;}
private:T real;T imag;
};
//成员函数
template<class T>
Complex<T>::Complex(T r=0,T i=0)
{real = r;imag =i;
}
//成员函数
template<class T>
void Complex<T>::print()
{cout<<real<<"+"<<imag<<endl;
}
int  main()
{Complex<int> c1(1,1);Complex<int> c2(2,2);Complex<int> c3;c3 = c1+c2;c3.print();cout<<c3<<endl;return 0;
}
知识3:类模板遇上static静态成员
//每一种类型A<int>、A<char>、A<float>对应自己各自的静态成员
#include <iostream>
using namespace std;template<class T>
class A
{
public:A();static int get_count();~A();
private:static int count;
};
//下面是成员属性的初始化、成员函数的实现
template<class T>
int A<T>::count = 0;template<class T>
A<T>::A()
{count++;
}template<class T>
int A<T>::get_count()
{return count;
}template<class T>
A<T>::~A()
{count--;
}int main()
{A<int> a1;A<int> a2;A<int> a3;cout<<A<int>::get_count()<<endl;  //3个A<int>类型的对象
---------------------------------------------------------------A<char> aa1;A<char> aa2;cout<<A<char>::get_count()<<endl; //2个A<char>类型的对象
}

(函数/类模板)的(偏特化/全特化)
详解见C++中的博客

第十天2017/04/21(2、泛型编程:模板 / 全特化、偏特化)相关推荐

  1. 第十天2017/04/21(3、泛型编程:STL)

    C++ Vector 使用心得:https://software.intel.com/zh-cn/blogs/2011/08/10/c-vector

  2. 第十天2017/04/21(1、函数指针、❤动态库回调❤)

    1.函数指针的语法基础 [函数指针的定义.初始化.使用]对函数名去多少个&,都不起作用,都是一样的,都还是它本身test.如:test.&test.&&test.&am ...

  3. 第十天2017/04/25(2、企业财富库:)

    视频:2014.05.16 "双向链表" "栈:顺序栈.链栈" "队列:顺序队.链队"

  4. 第十天2017/04/23(1、企业财富库:“循环单链表”的设计与实现)

    循环单链表 循环单链表的插入操作(分为四种情况,归结为三类) 循环单链表的删除操作(分为四种情况,归结为三类) //circlelist.h函数的声明 #ifndef _CIRCLELIST_H_ # ...

  5. HPatches A benchmark and evaluation of handcrafted and learned local descriptors——2017.04

    Image Processing and Computer Vision_Review:HPatches A benchmark and evaluation of handcrafted and l ...

  6. 【跃迁之路】【440天】刻意练习系列199(2018.04.21)

    @(跃迁之路)专栏 叨叨两句 技术的精进不能只是简单的刷题,而应该是不断的"刻意"练习 该系列改版后正式纳入[跃迁之路]专栏,持续更新 一.SQL [跃迁之路]Java基础--SQ ...

  7. 3星|《财经天下周刊》2017年21期:海外购几乎是亚马逊中国的最后一根救命稻草...

    财经天下周刊 双周刊 2017年21期 第一次看这份杂志.总体评价3星,有一些参考价值. 以下是本期一些内容的摘抄: 1:微软高层亲口宣布放弃WP系统,不过是为早就"脑死亡"的WP ...

  8. 2014.04.21 ——— android 魅族SmartBar判断

    2014.04.21 --- android 魅族SmartBar判断 public boolean hasSmartBar() { try { // 新型号可用反射调用Build.hasSmartB ...

  9. 2017年计算机a级模拟试题,2017年计算机国考(二级Access)全真模拟试题及答案【手机题库】...

    &nbsp&nbsp[导读]: 2017年计算机国考(二级Access)全真模拟试题及答案,更多 计算机国考模拟试题.考试内容.考试报名.报考条件和历年真题,请访问计算机等级考试网(h ...

最新文章

  1. 将Select转变为支持输入内容对Select的Option进行筛选的js
  2. MongoDB代码——Python篇
  3. 从字节码角度解释i++和++i
  4. [-] Handler failed to bind to x.x.x.x:port排错
  5. vue watch监听对象
  6. 你是个有魅力的人吗?人格魅力这样修养而成
  7. YUV420、YUV422、RGB24转换
  8. Ubuntu搭建安装svn
  9. Atom飞行手册翻译: 1.4 小结
  10. python串口数据分包_python TCP Socket的粘包和分包的处理详解
  11. 安装logstash-7.9.3和filebeat-7.9.3
  12. 从零开始系类——电子元器件识别与检测技术
  13. [ORA-01033: ORACLE正在初始化或关闭]问题解决方案
  14. 《循序渐进Linux (第2版)》.pdf
  15. 前端架构师的YY定义
  16. 黑客技术入门|“知已知彼,百战不殆”——踩点
  17. 还在为图片转Excel而烦恼?6种转换方法让你3秒实现转换
  18. 【JAVA】-- 字符流(Reader、Writer)
  19. Android 九宫格抽奖
  20. Zion医疗中心使用RTLS系统,减少气垫丢失概率

热门文章

  1. TensorFlow Lite+Android,Google要搞的大事情
  2. 新思路设计可视化大型微服务监控系统
  3. 今天犯的一个错误,导致method GET must not have a request body
  4. 【开发工具】Spark Shell 的使用
  5. Node.js Web 模块
  6. TensorFlow损失函数(loss function) 2017-08-14 11:32 125人阅读 评论(0) 收藏 举报 分类: 深度学习及TensorFlow实现(10) 版权声明:
  7. 数据意识上的“代沟”
  8. 如何统统扩充loop设备的size(linux loop resize2fs)
  9. 算法与数据结构(归并排序)
  10. Docker Review - docker部署Tomcat Nginx