C++与C#对比学习:模板,泛型
![]() | ![]() | |
![]() | 为啥要用模板 我们知道有很多不同的对象类型可能有相同的操作,基本类型如数值类型的都有加减乘除,比大小啊.一个个从现实中抽象出来的类就更是具体很多共性了.如果是同一类事物可以弄个父类出来就OK,比如动物都具体的某些通用操作就搞个animal基类完事.但如果不是同一类事物,就不容易整个继承关系出来啊.比如人有身高,可以计算体重,一块石头也有长宽高,可以计算体重.如果有一个计算体重的函数,大家都可以拿来用,只要传不同的参数就行.函数重载可以实现类似的功能,但太麻烦了点,要整蛮多个函数啊. 于是在C++中就出现了模板(template)的概念.类中应用到模板就叫类模板,函数中应用到模板就叫函数模板.所谓模板嘛,就是个架子框架,我们拿来填充些内容才有实际用处.像做PPT时就有很多模板啊.C++中的模板就是里面用到一些变量,类型是不知道的.只有你调用的时候传个具体的类型,然后才会生成具体的类或模板,然后再调用.当然这是编译器后台给你做了很多工作.使用模板编程又叫泛型编程. C#里面没有模板的概念,不过有个泛型的概念.有点像把模板简化一下了.当然它们还是有些其他区别的.
C++模板用法 函数模板 举个最简单的例子,比较两数大小 template<typename T> //也可以把typename换成class,T也可以随便换成啥 T max(T one, T two) { return one > two ? one : two; }
int a = 123; int b = 456; int c = max(a,b);
类模板
template<typename TT> class Simple { public: TT Max(TT a,TT b) { return a > b ? a : b; } } ;
double a = 123; double b = 543; Simple<double> sm; double c = sm.Max(a,b);
C#泛型
class Temp<T> { public bool Max(T a, T b) { if (a.Equals(b)) return true; else return false; } }
Temp<int> temp = new Temp<int>(); int a = 123; int b = 123; bool result = temp.Max(a, b); | |
![]() | ![]() |