泛型-模板函数-模板类

转载 2015年07月07日 15:52:18
函数模板的性质
1) 函数模板并不是真正的函数,它只是C++编译生成具体函数的一个模子。
2) 函数模板本身并不生成函数,实际生成的函数是替换函数模板的那个函数,比如上例中的add(sum1,sum2),
    这种替换是编译期就绑定的。
3) 函数模板不是只编译一份满足多重需要,而是为每一种替换它的函数编译一份。
4) 函数模板不可以设置默认模板实参。比如template <typename T=0>不可以。
5) 函数模板不允许自动类型转换。
C++模版函数的语法
template  <typename 模版参数列表…>
函数返回类型 函数名(形参列表…)
上面两行可以合并成一行。
例如:
下面的几种写法是等效的并且class 和typename是可以互换的。
template  <typename T1, typename T2>
T1 fun(T1, T2, int )
{  //…..}
template  <typename T1,T2>  T1 fun(T1, T2, int )
{  //…..}
template  <class T1, class T2>
 T1 fun(T1, T2, int )
{  //…..}
template  <class T1,T2>  T1 fun(T1, T2, int )
{  //…..}
C++模版类的语法
template  <class 模版参数列表…>
class 类名
{ //类体}
成员的实现…
例如:
//类声明部分,有两个模板参数T1,T2
template  <class T1, class T2 >  
class A {
   private:
   int a;
  T1 b;  //成员变量也可以用模板参数
  public: 
  int fun1(T1 x, int y );
 T2 fun2(T1 x, T2 y);
}
//类实现部分
template  <class T1, class T2 >
int A<T1>:: fun1(T1 x, int y ){//实现…… }
 template  <class T1, class T2 >
T2 A<T1,T2>:: fun2(T1 x, T2 y) {//实现…… }
 //使用类A
 int main( ) {
 //定义对象a,并用int替换T1, float替换T2
   A<int, float>  a;
   //实例化a,调用a的属性和方法……
}
由上例可以看出, 类模板参数T1,T2对类的成员变量和成员函数均有效。
在C++编程中,当你要实现的一个类的某些成员函数和成员变量的算法
数据类型有关,可以考虑用类模板。C++版的数据结构算法大都用类模板实现。
类模板的性质
1) 类模板可以设置默认模板实参。
2) 类模板不是真正的类,它只是C++编译器生成具体类的一个模子。

C++11(15): 模板与泛型编程

面向对象编程和泛型编程都能处理在编写程序时不知道类型的情况。不同之处:OOP能处理类型在程序运行之前都未知的情况;而泛型编程中,在编译时就能获知类型了 模板参数类别不能为空。 模板参数表示在类或函...
  • u011851778
  • u011851778
  • 2014年09月16日 12:17
  • 1159

模板与泛型的区别

Visual C++ Language Reference Generics and Templates Generics and templates are both language fe...
  • SprintfWater
  • SprintfWater
  • 2013年04月12日 11:25
  • 2647

C++ 模板类,泛型

一、 范例: // Tclass.h #ifndef __T_CLASS_H__ #define __T_CLASS_H__ template class Tclass { public: ...
  • henuyx
  • henuyx
  • 2014年09月21日 22:56
  • 2553

模板与泛型的区别

Visual C++ Language Reference Generics and Templates Generics and templates are both language fe...
  • SprintfWater
  • SprintfWater
  • 2013年04月12日 11:25
  • 2647

关于C++泛型编程,模板声明和定义最好在同一个文件的解释。

关于C++泛型编程 模板的 声明和实现 不能分离的原因: 1.泛型-模板 template 2.模板不是变量,模板就是模板。 3.模板需要实例化成类,就像是内联函数进行替换一样,替换模板变量 t...
  • u012997311
  • u012997311
  • 2016年04月07日 10:09
  • 1127

菜鸟译文(二)——使用Java泛型构造模板方法模式

如果你发现你有很多重复的代码,你可能会考虑用模板方法消除容易出错的重复代码。这里有一个例子:下面的两个类,完成了几乎相同的功能: 实例化并初始化一个Reader来读取CSV文件;读取每一行并解析;把每...
  • liushuijinger
  • liushuijinger
  • 2014年08月19日 21:36
  • 6245

java泛型类和泛型函数

什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一...
  • djun100
  • djun100
  • 2014年01月10日 15:19
  • 67742

浅谈Java和C#泛型及C++模板

最近偶然接触到了类型擦除(TypeErasure)这个概念。通过查了一些资料才知道Java和C#的泛型是有一些区别的,当然与C++的模板也不一样。因此做了如下整理。 泛型的本质就是让你的类型能够拥有...
  • jackliu91
  • jackliu91
  • 2014年11月24日 18:29
  • 1123

[C++]模板与泛型编程

模板与泛型编程 本文尝试着介绍对泛型编程的理解,从而扩展我们的template编程。泛型编程是C++中非常重要的一部分,它使得我们节省了很多编写不同代码的体力。 1. 了解隐式接口和编译器多态与O...
  • stary_yan
  • stary_yan
  • 2016年05月04日 11:56
  • 1107

使用Java泛型构造模板方法模式

原文地址:http://blog.csdn.net/liushuijinger/article/details/38682999 如果你发现你有很多重复的代码,你可能会考虑用模板方法...
  • ilovekobemusic
  • ilovekobemusic
  • 2015年07月20日 17:21
  • 346
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:泛型-模板函数-模板类
举报原因:
原因补充:

(最多只允许输入30个字)