您的位置:首页 > 其它

类模板

2015-09-01 23:25 183 查看
1、类模板

类模板跟函数模板一样,类模板也是对数据的类型进行了参数化处理,

将数据的类型泛华,这样一个函数可以调用不同类型 的数据进行处理,这就是模板的方便之处,不用重复的定义调用不同数据类型的函数,

下面是不用函数模板的代码:

<span style="font-size:18px;">class Stack
{
public:
	void push(int i);
	int pop();
private:
	enum { size = 100 };
	int sarray[size];
	int scout;
};</span>


这个类只能处理int 类型的整数,不能处理float型 double型,char型的数据,想要处理这些类型的数据,

必须重新定义相应数据的类

如果定义为模板类,这些过程都可以省略

<span style="font-size:18px;">template <typename> T
class Stack
{
public:
	void push(int i);
	T pop();
private:
	enum { size = 100 };
	T sarray[size];
	int scout;
};</span>


定义一个模板类,这样都可以吹各种类型的数据,提高的效率

2、模板的定义

一个类模板的定义时以关键字template开始的,后面跟一堆尖括号,括号内容是模板的参数列表

语法:

template<typename T ,typename T1....................>

class 类模板名

{

}

注意当在类外定义成员函数时,成员函数的上面得写类模板的表达式

stack<T> 表示一个容器,存储的数据类型是T型

<span style="font-size:18px;">template <typename> T
class Stack
{
public:
	void push(int i);
	T pop();
private:
	enum { size = 100 };
	T sarray[size];
	int scout;
};
template <typename T>
T stack<T>::pop()
{
	return sarray[];
}</span>


模板函数还可以包含非类型参数例如:
stack<class T,int size=100>

模板的范例:

#include<cstdlib>
#include<iostream>
using namespace std;
template<typename T,int size=100>
class Stack
{
public:
	Stack() :sicout(0){}
	bool push(constT &i);
	bool pop(T &i);
	int get_size() const
	{
		return sicout;
	}
private:
	T s_iarray[size];
	int sicout;
};
template<typename T,int size>
bool Stack<T, size>::push(const T &i)
{
	if (sicout < size)
	{
		s_iarray[sicout++] = i;
		return  true;
	}
	else
	{
		return false;
	}
}
template<typename T,int size>
bool Stack<T, size>::pop(T &i)
{
	if (sicout >= 0)
	{
		i = s_iarray[--sicout];
		return true;
	}
	else
	{
		return false;
	}
}

int main()
{
	cout << "模板" < endl;
	Stack<int>iv;
	iv.push(1);
	cout << "压入1" << endl;
	iv.push(2); cout << "压入2" << endl;
	iv.push(3); cout << "压入3" << endl;
	cout << "元素个数" << endl;
	cout << iv.get_size() << endl;
	cout << "单出元素" << endl;
	int e = 0;
	iv.pop(e);
	cout << e << endl;
	system("pause");
	return 0;
}


3、模板函数中的非参数类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: