C++模板类的用法_C 语言

本文实例讲述了C++模板类的用法,分享给大家供大家参考。具体实现方法如下:

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; 
}

希望本文所述对大家的C++程序设计有所帮助。

时间: 2024-09-20 09:02:12

C++模板类的用法_C 语言的相关文章

详解C++编程中的vector类容器用法_C 语言

vector简介vector是STL中最常见的容器,它是一种顺序容器,支持随机访问.vector是一块连续分配的内存,从数据安排的角度来讲,和数组极其相似,不同的地方就是:数组是静态分配空间,一旦分配了空间的大小,就不可再改变了:而vector是动态分配空间,随着元素的不断插入,它会按照自身的一套机制不断扩充自身的容量. vector的扩充机制:按照容器现在容量的一倍进行增长.vector容器分配的是一块连续的内存空间,每次容器的增长,并不是在原有连续的内存空间后再进行简单的叠加,而是重新申请一

C++模板类的用法实例_C 语言

本文实例讲述了C++中模板类的用法,分享给大家供大家参考.具体方法如下: //#include "StdAfx.h #ifndef __AFXTLS_H__ #define __AFXTLS_H__ #include <Windows.h> class CSimpleList { public: CSimpleList(int nNextOffset=0); void Construct(int nNextOffset); //接口 BOOL IsEmpty() const; voi

详解C++的模板中typename关键字的用法_C 语言

typename的使用场合 用处1, 用在模板定义里, 标明其后的模板参数是类型参数.例如 template<typename T, typename Y> T foo(const T& t, const Y& y){//....}; templace<typename T> class CTest { private: T t; public: //... } 其实,这里最常用的是使用关键字class,而且二者功能完全相同,这里的class和定义类时的class完

VC++中图像处理类CBitmap的用法_C 语言

VC++中图像处理类CBitmap的用法 class CBitmap : public CGdiObject { DECLARE_DYNAMIC(CBitmap) public: static CBitmap* PASCAL FromHandle(HBITMAP hBitmap); // Constructors CBitmap(); BOOL LoadBitmap(LPCTSTR lpszResourceName); BOOL LoadBitmap(UINT nIDResource); BOO

深入浅析STL vector用法_C 语言

本文关于stl vector用法的介绍非常详细,具体内容请看下文 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了. Vector总览 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之

如何在C++中通过模板去除强制转换_C 语言

C++与C语言相比是一个强类型语言,即对数据类型的匹配程度较C更为严格,这有助于避免程序员在编程过程中由于粗心所犯之错.由于历史原因,C++中仍保留了reinterpret_ cast.static_cast等用于强制类型转换的关键字,但从语言向强类型发展的趋势来看,我们在编程工作中应尽量少使用强制类型转换,模板有助于我们实现这一目的.减少使用强制类型转换的另一个好处,是程序的可维护性更强. 下面让我们通过例子来了解如何通过模板减少程序中的强制转换.图1以简化的形式示例了双向链表(Double-

C++中vector容器的用法_C 语言

在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结. 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<int> vec; (3)尾部插入数字:vec.push_back(a); (4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的. (5)使用迭代器访问元素. vector<int>::iterator it; for(it=vec.begi

c++中string类成员函数c_str()的用法_C 语言

1.string类成员函数c_str()的原型: const char *c_str()const;//返回一个以null终止的c字符串 2.c_str()函数返回一个指向正规c字符串的指针,内容和string类的本身对象是一样的,通过string类的c_str()函数能够把string对象转换成c中的字符串的样式; 3.操作c_str()函数的返回值时,只能使用c字符串的操作函数,如:strcpy()等函数.因为,string对象可能在使用后被析构函数释放掉,那么你所指向的内容就具有不确定性.

C++编程中__if_exists与__if_not_exists语句的用法_C 语言

__if_exists 语句__if_exists 语句测试指定的标识符是否存在.如果该标识符存在,则执行指定的语句块. 语法 __if_exists ( identifier ) { statements }; 参数 参数 说明 identifier 要测试其存在性的标识符. statements identifier 存在时要执行的一个或多个语句. 备注 若要实现最可靠的结果,请在以下约束条件下使用 __if_exists 语句. 只将 __if_exists 语句应用于简单类型,而不是模板