掌握C++类和对象的模板

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++中类和对象的模板的相关知识。但对模板概念的模糊理解给代码实现上造成了一定的影响。而经过重复的尝试和修改最终让程序能够基本的实现实验的要求,当然这毕然存在着一定的缺陷,这将会是以后学习的重要部分之一。

而在此次实验过程中,感受到许多问题是需要花费不一样的努力才能够达到自我满意的结果的。尽管它已经可以满足当前的需要,但毕竟这并不是尽头,它仍需要不断的改善,才能够更接近尽头。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值