您的位置:首页 > 编程语言 > C语言/C++

c++第十六章-(函数模板与类模板)

2014-07-16 17:25 246 查看
函数模板的作用:解决需要重载多种不同类型参数的函数的问题,但又不想重载的时候。

好处,泛型编程,解决了多处重载的问题。

函数模板Demo:

//声明函数模板类型T,T代表泛型,类似于OC中的id。函数模板的声明要实现放在一齐,分开的话会报错。class换成typename也是同一个意思。
template <class T>
void swap(T &a,T&b)
{
T temp = a;
a = b;
b = temp;
}

int main(int argc, const char * argv[])
{
int i1 = 100;
int i2 = 200;
std::cout << "交换前,i1 = " << i1
<< "   i2 = "<< i2 <<  std::endl;
swap<int>(i1,i2);//调用方式一
std::cout << "交换前,i1 = " << i1
<< "   i2 = "<< i2 << std::endl;

std::string s1 = "小甲鱼";
std::string s2 = "小鱿鱼";
std::cout << "交换前,s1 = " << s1 << ",i2 = " << s2 << std::endl;
swap(s1, s2);//调用方式二
std::cout << "交换前,s1 = " << s1 << ",i2 = " << s2 << std::endl;
return 0;
}


控制台打印结果:

交换前,i1 = 100   i2 = 200
交换前,i1 = 200   i2 = 100
交换前,s1 = 小甲鱼,i2 = 小鱿鱼
交换前,s1 = 小鱿鱼,i2 = 小甲鱼


类模板Demo,实现栈式结构,first in last out,只有1个口。

template <class T>
class Stack
{

public:
Stack(unsigned int size = 100);
~Stack();
void push(T value);
T pop();

private:
unsigned int size;//数组容器data的大小
unsigned int sp;//栈的当前位置
T *data;//存储入栈的数组
};

template <class T>
Stack<T>::Stack(unsigned int size)
{
this -> size = size;
data = new T[size];//初始化一个泛型数组
sp = 0;
}

template<class T>
Stack<T>::~Stack<T>()
{
delete []data;
}

template<class T>
void Stack<T>::push(T value)
{
data[sp++] = value;
}

template<class T>
T Stack<T>::pop()
{
return data[--sp];
}

int main()
{
Stack<int> intStack(100);

intStack.push(1);
intStack.push(2);
intStack.push(3);

std::cout << intStack.pop() << "\n";
std::cout << intStack.pop() << "\n";
std::cout << intStack.pop() << "\n";
}


控制台输出结果:

3
2
1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: