实验内容及目的
实验目的:理解和掌握C++类和对象的模板。
实验内容:根据理论课中的Stack<T>类
Stack<T> |
-element[100]:T -size:int |
+Stack() +empty():bool +peek():T +push(value:T):void +pop():T +getSize():int |
(1) 向Stack类添加一个实例函数printStack,打印栈中所有元素。
(2) 为Stack类添加一个实例函数contains(T element),检查给定元素是否在栈中。
2 实验步骤
(1) 创建Stack.h文件,写入基本方法,属性,构造方法的声明;
(2) 创建main.cpp文件,实现声明的模板方法和实验内容的要求;
(3) 编写测试文件teststack来测试方法;
3 源代码
Stack.h
#include <iostream>
#ifndef STACK_H
#define STACK_H
template<typename T>
class Stack
{
public:
Stack();
bool empty();
T peek();
void push(T value);
T pop();
int getSize();
void printStack();
bool contains(T element);
private:
T elements[100];
int size;
};
template<typename T>
Stack<T>::Stack()
{
size=0;
}
template<typename T>
bool Stack<T>::empty()
{
return (size==0);
}
template<typename T>
T Stack<T>::peek()
{
return elements[size-1];
}
template<typename T>
void Stack<T>::push(T value)
{
elements[size++]=value;
}
template<typename T>
T Stack<T>::pop()
{
return elements[--size];
}
template<typename T>
int Stack<T>::getSize()
{
return size;
}
template<typename T>
void Stack<T>::printStack()
{
while(!empty())
{
std::cout<<pop()<<" ";
}
std::cout<<std::endl;
}
template<typename T>
bool Stack<T>::contains(T element)
{
for(int i=0;i<size;i++)
{
if(element==elements[i])
{
return true;
}
}
return false;
}
Main.cpp
#include <iostream>
#include <string>
#include "Stack.h"
using namespace std;
int main()
{
Stack<int> intStack;
for(int i=0;i<10;i++){
intStack.push(i);
}
intStack.printStack();
for(int i=0;i<10;i++){
intStack.push(i);
}
cout<<"5? "<<intStack.contains(5)<<endl;
cout<<"6? "<<intStack.contains(6)<<endl;
cout<<"10? "<<intStack.contains(10)<<endl;
Stack<string> stringStack;
stringStack.push("beijing");
stringStack.push("guangzhou");
stringStack.push("zhongshan");
stringStack.printStack();
stringStack.push("beijing");
stringStack.push("guangzhou");
stringStack.push("zhongshan");
cout<<"beijing? "<<stringStack.contains("beijing")<<endl;
cout<<"chongqing? "<<stringStack.contains("chongqing")<<endl;
cout<<"zhongshan? "<<stringStack.contains("zhongshan")<<endl;
return 0;
}
4 遇到的问题与分析
开始的时候看到题目就发现题目不是那么的难,因为先前有做过一个关于Stack类的实验,其实这次实验就是要在Stack类的基础上新增两个功能,打印元素和比较元素是否在栈中,具体的实现在书中有相关的示例,不是很难。
5 实验体会
通过本次实验,我更好地理解和掌握C++类和对象的模板,对于模板类函数统一类型声明和实现,在test的时候模板对所接收的类型自动变换为对应类型的实现方法也有了更深一步的了解,总体来说对于实验还是较好地完成了。