您的位置:首页 > 其它

泛型-模板函数-模板类

2015-07-07 15:52 260 查看
函数模板的性质

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++编译器生成具体类的一个模子。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: