类模板

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、模板函数中的非参数类型



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值