1 实验内容及目的
l 实验目的
理解和掌握C++类和对象的模板。
l 实验内容
实现Stack<T>类,1)向Stack类添加一个实例函数printStack,以打印栈中所有元素;2)为Stack类添加一个实例函数contains(T element),检查给定元素是否在栈中。
2 实验步骤
(1)实现类
l Stack<T>类
(2)编写测试程序
创建若干个Stack对象,运用类中的功能函数对其进行打印和检索。
3 源代码
头文件:
#ifndef ClassTemplate_HH
#define ClassTemplate_HH
template<typename T>
class Stack{
private:
T elems[100];
int size;
public:
Stack();//Constructor
void push(T const e);
T pop();
T peek();
bool empty();
int getSize();
void printStack();
bool contains(T e);
};
//这是构造函数
//注意这些格式
template <typename T>
Stack<T>::Stack(){size = 0;}
//这是void show();
template <typename T>
void Stack<T>::push(T x)
{
elems[size] = x;
size++;
}
template <typename T>
T Stack<T>::pop()
{
T temp;
temp = elems[size-1];
size--;
elems[size-1] = null;
return temp;
}
template <typename T>
T Stack<T>::peek()
{
return elems[size-1];
}
template <typename T>
int Stack<T>::getSize()
{
return size;
}
template <typename T>
void Stack<T>::printStack(){
for (int i=0;i<size;i++)
cout<<elems[i]<<endl;
}
template <typename T>
bool Stack<T>::contains(T x){
for (int i = 0;i<size;i++)
if (elems[i]==x)
return 1;
else return 0;
}
#endif
测试文件:
#include <iostream>
#include "max.h"
using std::cout;
using std::cin;
using std::endl;
void main()
{
Stack<char> ch;
int n = 0,i;
int x;
cout <<"输入个数:"<<endl;
cin >>n;
cout <<"输入相应个数元素:"<<endl;
for (i=0;i<n;i++){
cin>>x;
ch.push(x);
}
ch.printStack();
cout<<"输入查找元素:"<<endl;
cin >>x;
if (ch.contains(x))
cout<<"该元素存在于栈中"<<endl;
else
cout<<"该元素不存在于栈中"<<endl;
}
4 遇到的问题与分析
对模板类的认识不够透切,存在概念的模糊,导致在运行过程中出现错误。
方法:查阅课本,严格按照课本的例子进行模板类的书写,从而解决问题。
5 实验体会
通过该实验,基本上了解了C++中类和对象的模板的相关知识。但对模板概念的模糊理解给代码实现上造成了一定的影响。而经过重复的尝试和修改最终让程序能够基本的实现实验的要求,当然这毕然存在着一定的缺陷,这将会是以后学习的重要部分之一。
而在此次实验过程中,感受到许多问题是需要花费不一样的努力才能够达到自我满意的结果的。尽管它已经可以满足当前的需要,但毕竟这并不是尽头,它仍需要不断的改善,才能够更接近尽头。