灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3197回复:0

[C++技术]C++与C#对比学习:模板,泛型

楼主#
更多 发布于:2012-09-23 13:17

为啥要用模板

 我们知道有很多不同的对象类型可能有相同的操作,基本类型如数值类型的都有加减乘除,比大小啊.一个个从现实中抽象出来的类就更是具体很多共性了.如果是同一类事物可以弄个父类出来就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);


喜欢0 评分0
游客

返回顶部