template模板二
来源:互联网 发布:淘宝网浅秋女羊毛衫 编辑:程序博客网 时间:2024/05/20 20:03
二、类模板通式
1、类模板的格式为:
template<class 形参名,class 形参名,…> class 类名
{ ... };
类模板和函数模板都是以template开始后接模板形参列表组成,模板形参不能为空,一但声明了类模板就可以用类模板的形参名声明类中的成员变量和成员函数,即可以在类中使用内置类型的地方都可以使用模板形参名来声明。比如
template<class T> class A{public: T a; T b; T hy(T c, T &d);};
在类A中声明了两个类型为T的成员变量a和b,还声明了一个返回类型为T带两个参数类型为T的函数hy。
2、类模板对象的创建:比如一个模板类A,则使用类模板创建对象的方法为A<int> m;在类A后面跟上一个<>尖括号并在里面填上相应的类型,这样的话类A中凡是用到模板形参的地方都会被int 所代替。当类模板有两个模板形参时创建对象的方法为A<int, double> m;类型之间用逗号隔开。
3、对于类模板,模板形参的类型必须在类名后的尖括号中明确指定。比如A<2> m;用这种方法把模板形参设置为int是错误的(编译错误:error C2079: 'a' uses undefined class 'A<int>'),类模板形参不存在实参推演的问题。也就是说不能把整型值2推演为int 型传递给模板形参。要把类模板形参调置为int 型必须这样指定A<int> m。
4、在类模板外部定义成员函数的方法为:
template<模板形参列表> 函数返回类型 类名<模板形参名>::函数名(参数列表){函数体},
比如有两个模板形参T1,T2的类A中含有一个void h()函数,则定义该函数的语法为:
template<class T1,class T2> void A<T1,T2>::h(){}。
注意:当在类外面定义类的成员时template后面的模板形参应与要定义的类的模板形参一致。
5、再次提醒注意:模板的声明或定义只能在全局,命名空间或类范围内进行。即不能在局部范围,函数内进行,比如不能在main函数中声明或定义一个模板。
#include <QCoreApplication>#include <QDebug>template<typename T> class A{public: T a; T b; T add(T c, T d) { return c+d; }};template<typename T1,typename T2> class B{public: T1 a; T2 b; T1 add(T1 c, T2 d) { return c+d; }};int main(int argc, char *argv[]){ A<int> s; B<int,double> m; int a = 8; double b = 6; double c = 6; qDebug()<<s.add(b,c); qDebug()<<m.add(a,c); return 0;}
运行结果:
- template模板二
- Android Template(模板) 编写(二)
- 模板Template
- 模板Template
- 模板(template)
- template 模板
- 模板template
- 模板(Template)
- template模板
- template模板
- template模板
- 模板template
- 模板template
- 模板template
- Velocity模板引擎(template engine)学习笔记二
- 设计模式之(二十一)模板模式(template)
- 二十二、模板方法模式Template Method(行为型)
- C++ Template 基础篇(二):类模板
- R内置常数(Built-in Constants)
- 删除无效服务
- WPF InkCanvas MouseDown触发 MouseUp不触发问题
- 分布式订单号一
- mysql根据查询插入数据
- template模板二
- windows eclipse调试linux hadoop
- C++ Primer:NOTE
- 权限控制--自定义filter过滤URL
- 编程技巧干货笔记 开篇
- 数字类型、字符串类型常用转换,数据精度问题解决
- 【帝国CMS】怎么彻底地删除文章(数据库)
- ADB Shell Monkey Command
- 4.解决Hash冲突的几种方法