`
jgsj
  • 浏览: 956912 次
文章分类
社区版块
存档分类
最新评论

C++类模板template

 
阅读更多

类模板的出现可以精简代码,设想一下,函数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++栈类模板

    C++栈类模板 template class Stack { public: Stack(void); void Push(const T &item;); //将元素item压入栈 T Pop(void); //将栈顶元素弹出栈 void ClearStack(void); T Peek(void)const; //访问栈顶元素 ...

    C++链表类 模板类

    C++链表类 模板类 #include #include #include "LinkedList.h" using namespace std; template Node&lt;T&gt; *LinkedList&lt;T&gt;::GetNode(const T& item, Node* ptrNext) //生成新结点 { Node&lt;T&gt; *p; p = new Node...

    c++template 模板介绍

    关于c++template 模板介绍,自己感觉很好介绍给大家~~

    C++动态数组类模板

    动态数组类模板Array C++ //数组类模板声明 template class Array { public: Array(int sz = 50); Array(const Array&lt;T&gt; &A); ~Array(void); Array&lt;T&gt;& operator = (const Array&lt;T&gt; &rhs;); //重载=,使数组...

    C++ 类模板和模板类的深入解析

     答:class用于定义类,在模板引入c++后,初定义模板的方法为:template,这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字,它的作用同...

    C++ 6.0 Template(模板库)参考手册.zip

    C++ 6.0 Template(模板库)参考手册.zip 解压后是WDL格式的。

    用c++类模板,实现的单链表基本操作

    template struct LNode { T data; LNode&lt;T&gt; *next; }; template class LinkList { public: LinkList(){L = 0;}//构造函数 ~LinkList();//析构函数,销毁单链表 void CreateList_L(int n);//构造单链表 bool ...

    c++ 类模板、类函数

    详细 描述c++ 类模板、类函数的使用。好资料。

    c++ template中文版

    c++ templatec++ templatec++ template

    C++模板元编程

    C++模板元编程,ISBN:9787111267423,作者:(美)大卫 等著,荣耀 译 原作名: C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond 出版年: 2010-1 页数: 277

    用c++模板类实现矩阵的四则运算

    用c++模板类实现矩阵的四则运算,其中乘法和除法为点乘和点除运算,即相应元素的运算

    《 C++模板》和《C++模板元编程》两本

    两本学习C++模板的书,先学习C++模板再学习模板元编程,中高级难度

    C++模板教程C++_Templates_TheCompleteGuide.rar

    C++模板教程C++_Templates_TheCompleteGuide,C++模板教程C++_Templates_TheCompleteGuide,C++模板教程C++_Templates_TheCompleteGuide

    c++函数模板

    其中,template为关键字,表示定义一个模板(可以是函数模板或类模板),尖括号表示模板参数,模板类型参数使用关键字class或typename开始,其后是一个用户定义的合法的标识符。 如果用户在调用函数模板时显式标识...

    C++函数模板与类模板实例解析

    模板(template)是泛型编程的基础,一个模板就是一个创建类或函数的蓝图或公式。例如,当使用一个vector这样的泛型类型或者find这样的泛型函数时,我们提供足够的信息,将蓝图转换为特定的类或函数。 一、函数模板 ...

    由浅入深学习C++模板

    模板练习 ├─Macro1 │ └─res ├─Macro2 │ └─res ├─Macro3 │ └─res ├─Template1 ├─Template2 ├─Template3 ├─Template4 ├─Template5 ├─函数指针模板 │ ├─FuncTemplate1 │ ├─...

    基于C++模板(template)的二叉树,支持任意类型为数据

    基于C++模板(template)的二叉树,支持任意类型为数据 支持查找,删除,遍历等 /* 二叉树节点信息 */ template&lt;class T&gt; class BiNode { public: T data; BiNode * lch; BiNode * rch; BiNode() :lch(NULL), ...

    C++标准模板库 STL

    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...

Global site tag (gtag.js) - Google Analytics