您当前的位置: 首页 >  c++

惊鸿一博

暂无认证

  • 2浏览

    0关注

    535博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++_class Template about Stack(使用类模板实现栈操作)

惊鸿一博 发布时间:2017-04-15 10:31:54 ,浏览量:2

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             
关注
打赏
1663399408
查看更多评论
0.0364s