模板类的使用

本文介绍了一个使用C++模板类实现的简单撤销与恢复功能的容器。该容器能够存储一定数量的操作,并允许用户撤销最近的操作或将操作恢复。通过模板化设计,此容器可以应用于多种数据类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

main.h

template <class T>
class actioncontainer
{
public:
	//构造函数
	actioncontainer()
	{
		m_nRedoPos = 0;
		m_nUndoPos = 0;
	}
	//容器的接口函数
	void add(T value);
	T redo();
	T undo();
	//容器的属性
private:
	int m_nRedoPos;
	int m_nUndoPos;
	const static int ACTION_SIZE=5;

	T m_RedoAction[ACTION_SIZE];
	T m_UndoAction[ACTION_SIZE];
};

template<class T>
void actioncontainer<T>::add(T value)
{
	if (m_nUndoPos >= ACTION_SIZE)
	{
		//如果容器已潢,刚调整添加位置
		m_nUndoPos = ACTION_SIZE - 1;
		for(int i = 0; i < ACTION_SIZE; i++)
		{
			m_UndoAction[i] = m_UndoAction[i+1];
		}
	}
	m_UndoAction[m_nUndoPos++] = value;
}

template<class T>
T actioncontainer<T>::redo()
{
	//将恢复动作复制到撤销数组中
	m_UndoAction[m_nUndoPos++] = m_RedoAction[--m_nRedoPos];

	//返回恢复的动作
	return m_RedoAction[m_nRedoPos];
}

template<class T>
T actioncontainer<T>::undo()
{
	m_RedoAction[m_nRedoPos++] = m_UndoAction[--m_nUndoPos];

	return m_UndoAction[m_nUndoPos];
}

main.cpp

// test_iostream.cpp : 定义控制台应用程序的入口点。
//
#include "StdAfx.h"
#include "main.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	actioncontainer<int> intaction;

	//向容器中加动作
	intaction.add(1);
	intaction.add(2);
	intaction.add(3);
	intaction.add(4);

	//撤销上一步动作
	int nUndo = intaction.undo();
	nUndo = intaction.undo();

	//恢复
	int nRedo = intaction.redo();
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值