1.类模板定义:
在C++的Template中很多地方都用到了typename与class这两个关键字,有时候这两者可以替换,那么这两个关键字是否完全一样呢?
事实上class用于定义类,在模板引入c++后,最初定义模板的方法为:template,这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字,它的作用同class一样表明后面的符号为一个类型,这样在定义模板的时候可以使用下面的方式了:
template.在模板定义语法中关键字class与typename的作用完全一样
2.类模板与模板类 :
一个类模板(类生成类)允许用户为类定义个一种模式,使得类中的某些数据成员、默认成员函数的参数,某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的)。
如果一个类中的数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表一类类。
3.关于类模板的使用:
类模板的使用实际上是将类模板实例化成一个具体的类,它的格式为:类名
模板类是类模板实例化后的一个产物,说个具体点的例子吧,我们把类模板比作是一个做饼干的模子,而模板类就是用这个模子做出来的饼干,至于这个饼干是什么味道的就要看你自己在实例化时用的是什么材料了,你可以做巧克力饼干,也可以做牛奶饼干,这些饼干出了材料不一样外,其它的东西都是一样的了。
4.使用条件:
如果某个函数对所有的 数据类型 (int double float string...)都进行相同的处理,就应该把它编写成一个模板。
如果某个函数对不同的数据类型进行不同的处理,就应该对它进行重载。
5.代码示例:类模板实现 栈操作
// classTemplate.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
template //构造一个类模板 :栈的实现
class Stack
{
public:
Stack(unsigned int size = 100);
~Stack();
void push(T value); //入栈
T pop(); //出栈
private:
unsigned int size; //栈初始尺寸
unsigned int sp; //栈指针位置
T *data; //指向栈中存放的数据 的指针
};
//类模板中方法的定义
template
Stack::Stack(unsigned int size)
{
this->size = size;
data = new T[size]; //初始化栈 分配大小 指向第一个数据
sp = 0; //初始化指针位置为0
}
template
Stack:: ~Stack()
{
delete []data;
data = NULL;
}
template
void Stack::push(T value)
{
data[sp++] = value;
}
template < class T >
T Stack::pop()
{
return data[--sp];
}
int main()
{
Stack intStack =Stack(100);
//Stack intStack(100); 初始化写法2
intStack.push(1);
intStack.push(2);
intStack.push(3);
std::cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?