C++类模板的定义
来源:互联网 发布:js数组定义的方式 编辑:程序博客网 时间:2024/05/16 07:25
因为自己在书里看的不是很明白所以在这里写篇博客方便自己记忆和理解。
C++的类模板为生成通用的类声明提供了一种更好的方法。模板提供参数化类型,既能够将类型名作为参数传递给对方来建立类或函数。例如,将类型名int传递给Queue模板,可以让编译器构造一个对int进行排队的Queue类。
下面以Stack类为基础来建立模板。原来的类声明如下:
typedef unsigned long Item;
class Stack
{
private:
enum{MAX=10};
Item items[MAX];
int top;
public:
Stack();
bool isempty() const;
bool isfull() const;
bool push(const Item &item);
bool pop(Item & item);
};
采用模板时,将使用模板定义替换 Stack声明,使用模板成员函数替换Stack的成员函数。和模板函数一样,模板类一下面这样的代码开头:
template <class Type>
关键字template告诉编译器,将要定义一个模板。尖括号的内容相当于函数的参数列表。可以把关键字class看作是变量的类型名,改变量接受类型作为其值,把Tpye看作是该变量的名称。
这里使用的class并不意味着Type必须是一个类;而只是表明Type是一个通用的类型说明符,在使用模板时,将使用实际的类型替换他。较新的C++实现允许在这种情况下使用不太容易混淆的关键字typename代替class:
template <typename Type>
可以使用自己的泛型名代替Type,其命名规则是其他标识符相同。当前流行的选项包括T和Type,我们将使用后者。当模板被调用时,Type将被具体的类型值(如int 或string)取代,在模板定义中,可以使用泛型名来表示要储存在栈中的类型。对于Stack来说,这意味着应将声明中的所有的typedef标识符Item替换为Type。例如:
Item item[MAX];
应改为:
Type item[MAX];
同样,可以使用模板成员函数替换原有类的类方法。每个函数头都将以相同的模板声明打头:
template<class Tpye>
同样应使用泛型名Type替换typedef标识符Item。另外,还需将类限定符从Stack::改为Stack<Type>::。例如,
bool Stack::push(const Item &item)
{
...
}
应该为:
template<class Type>
bool Stack<Type>::push(const Type &item)
{
...
}
如果在类声明中定义了方法(内联定义),则可以省略模板前缀和类限定符。
- 【C++】数组类的定义(类模板)
- C++primer学习:模板编程(2):类模板的定义
- C++ 模板类的声明与定义
- C++:浅说模板定义
- C++类模板的定义
- 模板类的特例定义
- C++_Primer 16.1 模板定义
- C的宏定义实现模板函数——C的C++模板函数机制实现
- 顺序表的类模板定义
- 链表模板类的定义
- 顺序栈类模板的定义
- c++ 友元模板类的定义
- 类模板的定义和使用
- 类模板的定义和使用
- 类模板的定义和实例化
- 模板类的定义与声明
- 类模板的声明和定义
- c++ 友元模板类的定义
- 朱友鹏老师嵌入式课程观后感
- Android:Handler+Looper+MessageQueue+Thread(线程间的通信)随记
- callable,compile,eval,single,exec,递归
- 优化SQLServer数据库加快查询速度
- 天声人語 20151219 手書きの年賀状
- C++类模板的定义
- 堆排序
- 日经春秋 20151219
- PHP常用正则表达式汇总
- juery实现粘贴复制
- win7+Ubuntu14.10双系统重装win10后,通过easyBCD2.0在win10下恢复ubuntu的引导
- Ubuntu下压缩、解压缩rar文件
- 从量子加密到机器学习,盘点2015阿里云开放的黑科技
- android:windowSoftInputMode属性