C++与C#对比学习:模板,泛型

[来源] 达内    [编辑] 达内   [时间]2012-10-12

于是在C++中就出现了模板(template)的概念.类中应用到模板就叫类模板,函数中应用到模板就叫函数模板.所谓模板嘛,就是个架子框架,我们拿来填充些内容才有实际用处.像做PPT时就有很多模板啊

  我们知道有很多不同的对象类型可能有相同的操作,基本类型如数值类型的都有加减乘除,比大小啊.一个个从现实中抽象出来的类就更是具体很多共性了.如果是同一类事物可以弄个父类出来就OK,比如动物都具体的某些通用操作就搞个animal基类完事.但如果不是同一类事物,就不容易整个继承关系出来啊.比如人有身高,可以计算体重,一块石头也有长宽高,可以计算体重.如果有一个计算体重的函数,大家都可以拿来用,只要传不同的参数就行.函数重载可以实现类似的功能,但太麻烦了点,要整蛮多个函数啊.

  于是在C++中就出现了模板(template)的概念.类中应用到模板就叫类模板,函数中应用到模板就叫函数模板.所谓模板嘛,就是个架子框架,我们拿来填充些内容才有实际用处.像做PPT时就有很多模板啊.C++中的模板就是里面用到一些变量,类型是不知道的.只有你调用的时候传个具体的类型,然后才会生成具体的类或模板,然后再调用.当然这是编译器后台给你做了很多工作.使用模板编程又叫泛型编程.

  C#里面没有模板的概念,不过有个泛型的概念.有点像把模板简化一下了.当然它们还是有些其他区别的.

  C++模板用法

  函数模板

  举个最简单的例子,比较两数大小

  template //也可以把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

  class Simple

  {

  public:

  TT Max(TT a,TT b)

  {

  return a > b ? a : b;

  }

  }

  ;

  double a = 123;

  double b = 543;

  Simple sm;

  double c = sm.Max(a,b);

  C#泛型

  class Temp

  {

  public bool Max(T a, T b)

  {

  if (a.Equals(b))

  return true;

  else

  return false;

  }

  }

  Temp temp = new Temp();

  int a = 123;

  int b = 123;

  bool result = temp.Max(a, b);

资源下载