首页 > 代码库 > 第2章 C++模板技术
第2章 C++模板技术
/*第2章 C++模板技术 2.1 函数模板 2.2 类模板 2.3 模板完全特化 2.4 函数模板重载 2.5 类模板继承 2.6 本章小结*///第2章 C++模板技术// 2.1 函数模板 ----------------------------------------------------------------------------------------------------// p 26#include <stdio.h>template <class T> T max(T a, T b){ return a> b ? a : b;}int main(void){ printf("%d\n", max < int > (3, 10)); printf("%f\n", max < double > (16.9, 2.8)); return 0;}// 27#include <stdio.h>template <class T1, class T2> T1 max(T1 t1, T2 t2){ return static_cast<T1> (t1> t2 ? t1 : t2);}int main(void){ printf("%f\n", max(10.9, 3)); return 0;}// 2.2 类模板 ----------------------------------------------------------------------------------------------------// p 28 , my test#include <cstdio>#include <typeinfo>int main(void){ int i(3); printf("%s\n",typeid(i).name()); return 0;}// 28#include <stdio.h>#include <typeinfo.h>template <class T1, class T2> class A{ T1 i; T2 j; public: A(T1 t1, T2 t2) { i = t1; j = t2; } bool comp() { return i > j; } void print_Type();};template <class T1, class T2> void A<T1, T2>::print_Type(){ printf("i的类型是%s\n", typeid(i).name()); printf("j的类型是%s\n", typeid(j).name());}int main(void){ A < int, double > a(3, 67.8); if(a.comp()) printf("i>j \n"); else printf("i<=j \n"); a.print_Type(); return 0;}// 2.3 模板完全特化 ----------------------------------------------------------------------------------------------------// 28#include <stdio.h>template <class T> void func(T a){ printf("hello\n");}//函数模板完全特化template <> void func<int> (int a){ printf("hello there\n");}int main(void){ func(2); //打印hello there func(‘y‘); //打印hello return 0;}// 29#include <stdio.h>//类模板Atemplate <class T> class A{ T i; public: A(T t) { i = t; } T compute() { return i *i; }};//类模板A的完全特化template <> class A<int>{ int i; int k; //添加新数据成员 public: A(int t) { i = t; printf("hello\n"); } //添加打印 int compute() { return i *i * i; } //改为立方计算 void f(){} //添加新成员函数};int main(void){ A < double > dObj(2.5); A < int > iObj(5); //打印hello printf("%f\n", dObj.compute()); //平方计算6.25 printf("%d\n", iObj.compute()); //立方计算125 return 0;}// 2.4 函数模板重载 ----------------------------------------------------------------------------------------------------// 30#include <stdio.h>template <class T> void func(T a){ printf("使用func(T a)模板\n");}//函数模板的重载template <class T1, class T2> int func(T1 t1, T2 t2){ printf("使用func(T1 t1, T2 t2)模板\n"); return 1;}int main(void){ func(30, 60); //使用重载的函数模板 func(19); return 0;}// 2.5 类模板继承 ----------------------------------------------------------------------------------------------------// 30-31#include <stdio.h>template <class T> class A{ public: void func(T a) { printf("使用func(T a)成员函数模板\n"); }};template <class T1, class T2> class B: public A<T1>{ public: void func(T1 t1, T2 t2) { printf("使用func(T1 t1, T2 t2)成员函数模板\n"); }};int main(void){ B < int, double > b; b.func(30, 60); A < int > a = static_cast < A < int > > (b); a.func(10); return 0;}// 2.6 本章小结 ----------------------------------------------------------------------------------------------------
TOP
第2章 C++模板技术
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。