第56课 函数模板的概念和意义

Posted wanmeishenghuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第56课 函数模板的概念和意义相关的知识,希望对你有一定的参考价值。

发散性问题:

C++有几种交换变量的方法?

定义宏代码块与函数:

实验:

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 #define SWAP(t, a, b)     7 do                        8 {                         9     t c = a;             10     a = b;               11     b = c;               12 }while(0)
13 
14 
15 void Swap(int& a, int& b)
16 {
17     int c = a;
18     a = b;
19     b = c;
20 }
21 
22 void Swap(double& a, double& b)
23 {
24     double c = a;
25     a = b;
26     b = c;
27 }
28 
29 void Swap(string& a, string& b)
30 {
31     string c = a;
32     a = b;
33     b = c;
34 }
35 
36 int main()
37 {
38     int a = 0;
39     int b = 1;
40     
41     Swap(a, b);
42     
43     cout << "a = " << a << endl;
44     cout << "b = " << b << endl;
45     
46     double m = 2;
47     double n = 3;
48     
49     Swap(m, n);
50     
51     cout << "m = " << m << endl;
52     cout << "n = " << n << endl;
53     
54     string d = "Delphi";
55     string t = "Tang";
56     
57     Swap(d, t);
58     
59     cout << "d = " << d << endl;
60     cout << "t = " << t << endl;
61     
62     return 0;
63 }

结果如下:

技术分享图片

每当我们需要交换两个变量的值时,就需要重载一个函数,这是重复性的劳动。

 

优缺点分析:

技术分享图片

我们需要找到一种方法可以集合宏和函数的优点。

泛型编程:

技术分享图片

 

函数模板:

技术分享图片

 

 

技术分享图片

 

 

技术分享图片

 

实验:

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 template < typename T >
 7 void Swap(T& a, T& b)
 8 {
 9     T c = a;
10     a = b;
11     b = c;
12 }
13 
14 template < typename T >
15 void Sort(T a[], int len)
16 {
17     for(int i=0; i<len; i++)
18     {
19         for(int j=i; j<len; j++)
20         {
21             if( a[i] > a[j] )
22             {
23                 Swap(a[i], a[j]);
24             }
25         }
26     }
27 }
28 
29 template < typename T >
30 void Println(T a[], int len)
31 {
32     for(int i=0; i<len; i++)
33     {
34         cout << a[i] << ", ";
35     }
36     
37     cout << endl;
38 }
39 
40 int main()
41 {
42     int a[5] = {5, 3, 2, 4, 1};
43     
44     Println(a, 5);
45     Sort(a, 5);
46     Println(a, 5);
47     
48     string s[5] = {"Java", "C++", "Pascal", "Ruby", "Basic"};
49     
50     Println(s, 5);
51     Sort(s, 5);
52     Println(s, 5);
53     
54     return 0;
55 }

运行结果如下:

技术分享图片

 

 

 小结:

技术分享图片

 

以上是关于第56课 函数模板的概念和意义的主要内容,如果未能解决你的问题,请参考以下文章

第56课.函数模板的概念和意义

第58课 类模板的概念和意义

第58课 类模板的概念和意义

第43课 继承的概念和意义

第49课.多态的概念和意义

第49课 多态的概念和意义