C++函数模板总结:

//C++提高编程 模板(泛型编程 STL)
//模板不可以直接使用 它只是一个框架
//模板的通用并不是万能的
//语法
//template<typename T>
//函数模板两种方式
//1.自动类型推导 必须推导出一致的数据类型T,才可以使用
//2.显示指定类型 模板必须确定出T的数据类型,才可以使用

//普通函数与函数模板的区别:
//普通函数调用时可以发生自动类型转换(隐式类型转换)
//函数模板调用时 如果利用自动类型推导,不会发生隐式类型转换
//如果利用显示指定类型的方式 可以发生隐式类型转换

 

//普通函数与函数模板的调用规则:
//1.如果函数模板与普通函数都可以实现,优先调用普通函数
//2.可以通过空模板参数列表来强制掉用函数模板
//3.函数模板也可以发生重载
//4.如果函数模板可以产生更好的匹配 优先调用函数模板
//5.普通函数 模板函数最好不要同时出现 可能会出现二议性

 

//模板的局限性
//模板的通用性并不是万能的,有些特定数据类型,需要用具体化方式做特殊实现
//利用具体化的模板,可以解决自定义类型的通过化
//学习模板并不是为了写模板,而是在STL能够运用系统提供的模板

  1 //模板的局限性
  2 //模板的通用性并不是万能的,有些特定数据类型,需要用具体化方式做特殊实现
  3 //利用具体化的模板,可以解决自定义类型的通过化
  4 //学习模板并不是为了写模板,而是在STL能够运用系统提供的模板
  5 
  6 #include <iostream>
  7 #include <string>
  8 #include<fstream>
  9 using namespace std;
 10 
 11 class Person
 12 {
 13 public:
 14     Person(string  name, int age)
 15     {
 16         this->m_Name = name;
 17         this->m_AGe = age;
 18     }
 19     //姓名
 20     string m_Name;
 21 
 22     //年龄
 23     int m_AGe;
 24 
 25 
 26 };
 27 
 28 
 29 
 30 
 31 //对比两个数据是否相等
 32 template<typename T>
 33 bool myCompare(T& a, T& b)
 34 {
 35     if (a == b)
 36     {
 37         return true;
 38     }
 39     else
 40     {
 41         return false;
 42     }
 43 }
 44 
 45 //利用具体化Person的版本来实现代码,具体化优先调用
 46 template<> bool myCompare(Person& p1, Person& p2)
 47 {
 48     if (p1.m_Name == p2.m_Name && p1.m_AGe == p2.m_AGe)
 49     {
 50         return true;
 51     }
 52     else
 53     {
 54         return false;
 55     }
 56 }
 57 
 58 void test01()
 59 {
 60     int a = 10;
 61     int b = 20;
 62 
 63     bool ret = myCompare(a, b);
 64 
 65     if (ret)
 66     {
 67         cout << "a==b" << endl;
 68     }
 69     else
 70     {
 71         cout << "a != b" << endl;
 72     }
 73 }
 74 
 75 void test02()
 76 {
 77     Person p1("Tom", 10);
 78     Person p2("Tom", 110);
 79 
 80     bool ret = myCompare(p1, p2);
 81     if (ret)
 82     {
 83         cout << "p1==p2" << endl;
 84 
 85     }
 86     else
 87     {
 88         cout << "p1 !=p2" << endl;
 89     }
 90 }
 91 int main()
 92 {
 93 
 94 //    test01();
 95     test02();
 96 
 97     system("pause");
 98 
 99     return 0;
100 
101 }

 

posted on 2021-08-12 09:30  Bytezero!  阅读(56)  评论(0编辑  收藏  举报