函数模板的覆盖
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) 收藏 举报
浙公网安备 33010602011771号