泛型-模板函数-模板类
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++编译器生成具体类的一个模子。
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++编译器生成具体类的一个模子。
相关文章推荐
- PHP 获取客户端真实的ip地址
- 日历日历日历
- 对SQL连接池的理解
- PHPExcel融入ZF2
- ECNUOJ 2615 会议安排
- [laravel5.1学习]单个路由的中间件引用
- size class
- 用Arduino来看看快递的暴力程度
- Java中堆内存和栈内存详解
- linux部署java工程
- REST(Representational State Transfer)简介
- 推箱子游戏
- 使用Irrlicht构建游戏主角
- linux日志系统
- PHP下获取上个月、下个月、本月的日期(strtotime,date)
- resin servlets和jsp的引擎
- Android V4 包下的ViewDragHelper学习.
- 多编程还是多编程
- linux相关线程函数
- strtok()函数