类模板的出现可以精简代码,设想一下,函数max(int a, int b)求a和b两者中的最大值,如果我要求float型或double型,是否还要写一套max,这样太不优雅了。
先看一下类模板的固定格式——
//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必须引用某种类型的左值,而不是数组名。
分享到:
相关推荐
C++栈类模板 template class Stack { public: Stack(void); void Push(const T &item;); //将元素item压入栈 T Pop(void); //将栈顶元素弹出栈 void ClearStack(void); T Peek(void)const; //访问栈顶元素 ...
C++链表类 模板类 #include #include #include "LinkedList.h" using namespace std; template Node<T> *LinkedList<T>::GetNode(const T& item, Node* ptrNext) //生成新结点 { Node<T> *p; p = new Node...
关于c++template 模板介绍,自己感觉很好介绍给大家~~
动态数组类模板Array C++ //数组类模板声明 template class Array { public: Array(int sz = 50); Array(const Array<T> &A); ~Array(void); Array<T>& operator = (const Array<T> &rhs;); //重载=,使数组...
答:class用于定义类,在模板引入c++后,初定义模板的方法为:template,这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字,它的作用同...
C++ 6.0 Template(模板库)参考手册.zip 解压后是WDL格式的。
template struct LNode { T data; LNode<T> *next; }; template class LinkList { public: LinkList(){L = 0;}//构造函数 ~LinkList();//析构函数,销毁单链表 void CreateList_L(int n);//构造单链表 bool ...
详细 描述c++ 类模板、类函数的使用。好资料。
c++ templatec++ templatec++ template
C++模板元编程,ISBN:9787111267423,作者:(美)大卫 等著,荣耀 译 原作名: C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond 出版年: 2010-1 页数: 277
用c++模板类实现矩阵的四则运算,其中乘法和除法为点乘和点除运算,即相应元素的运算
两本学习C++模板的书,先学习C++模板再学习模板元编程,中高级难度
C++模板教程C++_Templates_TheCompleteGuide,C++模板教程C++_Templates_TheCompleteGuide,C++模板教程C++_Templates_TheCompleteGuide
其中,template为关键字,表示定义一个模板(可以是函数模板或类模板),尖括号表示模板参数,模板类型参数使用关键字class或typename开始,其后是一个用户定义的合法的标识符。 如果用户在调用函数模板时显式标识...
模板(template)是泛型编程的基础,一个模板就是一个创建类或函数的蓝图或公式。例如,当使用一个vector这样的泛型类型或者find这样的泛型函数时,我们提供足够的信息,将蓝图转换为特定的类或函数。 一、函数模板 ...
模板练习 ├─Macro1 │ └─res ├─Macro2 │ └─res ├─Macro3 │ └─res ├─Template1 ├─Template2 ├─Template3 ├─Template4 ├─Template5 ├─函数指针模板 │ ├─FuncTemplate1 │ ├─...
基于C++模板(template)的二叉树,支持任意类型为数据 支持查找,删除,遍历等 /* 二叉树节点信息 */ template<class T> class BiNode { public: T data; BiNode * lch; BiNode * rch; BiNode() :lch(NULL), ...
The Standard Template Library provides a set of well structured generic C++ components that work together in a seamless way. Special care has been taken to ensure that all the template algorithms work...