函数模板的覆盖

 1 /* 函数模板的覆盖 */
 2 
 3 #include<iostream>
 4 
 5 // 函数模板可以实现通用,可以根据自有的数据类型进行优化
 6 
 7 
 8 template<typename T>
 9 
10 void swap(T &a,T &b)
11 {
12     std::cout << "通用函数模板" << std::endl;
13     T temp;
14     temp = a;
15     a = b;
16     b = temp;
17 }
18 
19 void main()
20 {
21     int num1 = 100;
22     int num2 = 10;
23     swap(num1,num2);// 实现交换
24     std::cout << num1 << " " << num2 << std::endl; 
25 
26     char ch1 = 'Z';
27     char ch2 = 'A';
28     swap(ch1,ch2);
29     std::cout << ch1 << " " << ch2 << std::endl; 
30 
31     std::cin.get();// 等价于getchar();
32 }
33 
34 //----------------------------------------------------
35 
36 // 结构体,可以直接赋值
37 // 类,所有成员都是共有的类型可以复制
38 class info
39 {
40 public:
41     char name[40];
42     double db;
43     int data;
44 };
45 
46 struct info
47 {
48     char name[40];
49     double db;
50     int data;
51 };
52 
53 template<typename T>
54 void swap(T &a,T &b)
55 {
56     std::cout << "通用函数模板" << std::endl;
57     T temp;
58     temp = a;
59     a = b;
60     b = temp;
61 }
62 
63 
64 template<>// 模板覆盖,模板为空,明确类型 
65 void swap(info &info1,info &info2)
66 {
67     std::cout << "特有函数模板" << std::endl;
68     // 通用模板可以实现通用,针对自己的数据类型做出优化
69     info temp = info1;
70     info1 = info2;
71     info2 = temp;
72 }
73 
74 
75 
76 void main()
77 {
78     info info1 = {"wuxl",20.9,10};
79     info info2 = {"wuhr",9.3,1};
80     swap(info1,info2);
81 
82     std::cout << info1.name << info1.db << info1.data <<std::endl;
83     std::cout << info2.name << info2.db << info2.data <<std::endl;
84 
85     std::cin.get();
86 
87 }

 

处理私有类的函数模板覆盖:

 1 /* 处理私有类的函数模板覆盖 */
 2 
 3 #include<iostream>
 4 #include<string>
 5 
 6 
 7 // 如果类有私有成员变量 不可以用{} 初始化
 8 // 类的对象之间默认是可以直接赋值的
 9 // 类,结构体都有一个默认的赋值操作 =  浅拷贝
10 // 深拷贝用的最多  函数模板的覆盖
11 class info
12 {
13 public:
14     char name[40];
15     char *p;
16     int data;
17 private:
18     int num;
19 
20 public:
21     void set(int X)
22     {
23         this->num = X;// 通过接口设置私有变量
24     }
25     
26     int get()
27     {
28         return this->num;// 返回值 有副本机制
29     }
30 
31     info()// 构造函数
32     {
33         num = 0;
34     }
35 
36     ~info()// 析构函数
37     {
38         num = 0;
39     }
40 
41 };
42 
43 
44 template<>// 模板覆盖,模板为空,明确类型 
45 void swap(info &info1,info &info2)
46 {
47     std::cout << "特有函数模板" << std::endl;
48     // 通用模板可以实现通用,针对自己的数据类型做出优化
49     info temp = info1;
50     info1 = info2;
51     info2 = temp;
52 }
53 
54 // 函数对一个对象进行深拷贝 需要自己实现一个函数模板的重载
55 // 
56 void main()
57 {
58     info info1;
59     info info2;
60     std::strcpy(info1.name,"wuxl");
61     std::strcpy(info2.name,"nihao");
62     info1.data = 102;
63     info2.data = 201;
64     info1.p = new char[10];
65     std::strcpy(info1.p,"上海");
66     info2.p = new char[100];
67     std::strcpy(info2.p,"上海");
68     info1.set(89);
69     info2.set(98);
70 
71     swap(info1,info2);
72 
73     std::cout << info1.name << info1.data << info1.data << info1.get() <<std::endl;
74     std::cout << info2.name << info2.data << info2.data << info2.get() <<std::endl;
75     
76     std::cout << info1.p << std::endl;
77     std::cout << info2.p << std::endl;
78     std::cin.get();
79 
80 }

 

posted on 2015-05-31 14:42  Dragon-wuxl  阅读(198)  评论(0)    收藏  举报

导航