C++类模板template
2014-02-23 22:55
253 查看
类模板的出现可以精简代码,设想一下,函数max(int a, int b)求a和b两者中的最大值,如果我要求float型或double型,是否还要写一套max,这样太不优雅了。
先看一下类模板的固定格式——
注意:模板方法的定义要放在类声明所在的头文件中,若要独立放在一个cpp文件中,需要在每句template<class T>前加上关键字export,而且这要取决于编译器实现了export。
一般情况下T是基本类型如int,或常见的引用类型string,是否可以使用指针类型,这里需要注意一下——
这里引用《C++ Primer Plus》中的经典例子
若T为char *,有Stack<char *> st,栈有push操作,接受字符串,存入字符串,char* pro负责接受键盘输入,但并没有给它分配内存,所以无法接受,或许我们会改成char pro[40]的形式,但栈有pop操作:
在调用pop时有st.pop(pro),而引用变量item必须引用某种类型的左值,而不是数组名。
先看一下类模板的固定格式——
//A.h template<class T> class A { public: A(); void B(T &t); private: T at; }; template<class T> A<T>::A() {...} template<class T> void A<T>::B(T &t) {...} //main.cpp int main() { A<int> a; ... return 0 ; }
注意:模板方法的定义要放在类声明所在的头文件中,若要独立放在一个cpp文件中,需要在每句template<class T>前加上关键字export,而且这要取决于编译器实现了export。
一般情况下T是基本类型如int,或常见的引用类型string,是否可以使用指针类型,这里需要注意一下——
这里引用《C++ Primer Plus》中的经典例子
若T为char *,有Stack<char *> st,栈有push操作,接受字符串,存入字符串,char* pro负责接受键盘输入,但并没有给它分配内存,所以无法接受,或许我们会改成char pro[40]的形式,但栈有pop操作:
template<class Type> bool Stack<Type>::pop(Type &item) { if(top > 0) { item = items[--top]; return true; } else return false; }
在调用pop时有st.pop(pro),而引用变量item必须引用某种类型的左值,而不是数组名。
相关文章推荐
- java C#.net C++分布式设计技术
- c++的引用&
- 在Android上运行C语言编写的可执行程序
- C++ 输入流 cin/ ifstream/ istringstream 及几个相关函数在遇到文件结束符EOF时的行为
- c++讲解堆与栈的区别
- C++的XML解析器
- C语言静态变量和静态函数
- C++ XML解析之TinyXML篇
- 2382. Flowers Flourish from France
- C++中类成员函数作为回调函数的几种方法
- C++ 标准库之cctype
- LeetCode 62 — Unique Paths(C++ Java Python)
- 嵌入式软件笔试题 (c语言版)
- 51中的C语言数据类型
- 几种排序算法 C++
- VS2010 C++项目配置、宏、环境变量
- C语言介绍
- C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- c++中const的作用!!!
- 在二元树中找出和为某一值的所有路径 C++实现