国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++模板類的用法實例

2020-01-26 15:14:54
字體:
來源:轉載
供稿:網友

本文實例講述了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;   void AddHead(void *p);   void RemoveAll();   void* GetHead() const;   void* GetNext(void* preElement) const;   BOOL Remove(void* p);    //為實現接口所需的成員   void  *m_pHead;   size_t m_nextOffset;   void** GetNextPtr(void* preElement) const; };  //類的內聯函數 inline CSimpleList::CSimpleList(int nNextOffset)   {m_pHead = NULL; m_nextOffset = nNextOffset;  }  inline void CSimpleList::Construct(int nNextOffset)   {m_nextOffset = nNextOffset;  }  inline BOOL CSimpleList::IsEmpty() const {   return m_pHead==NULL; } //inline void AddHead(void *p) //{ // //} inline void CSimpleList::RemoveAll() {   m_pHead = NULL; } inline void* CSimpleList::GetHead() const {   return m_pHead; } inline void* CSimpleList::GetNext(void* preElement) const {   return *GetNextPtr(preElement); } //inline BOOL CSimpleList::Remove(void* p) //{ // //} inline void**  CSimpleList::GetNextPtr(void* preElement) const {   return (void**)((BYTE*)preElement+m_nextOffset); }   //定義模板類 template<class TYPE>  class CTypedSimpleList:public CSimpleList { public:   CTypedSimpleList(int nNextOffset=0)     :CSimpleList(nNextOffset){}   void Construct(int nNextOffset);   //接口   void AddHead(TYPE p)   {     CSimpleList::AddHead((void*)p);   }   TYPE GetHead()   {     return (TYPE)CSimpleList::GetHead();   }   TYPE GetNext(TYPE preElement)   {     return (TYPE)CSimpleList::GetNext((void*)preElement);   }   BOOL Remove(TYPE p)   {     return CSimpleList::Remove(p);   }      //直接引用類的對象會調用此函數   operator TYPE()   {     return (TYPE)CSimpleList::GetHead();   } }; #endif 

模板類的用法:

//測試模板類   MyThreadData* pTempData;   CTypedSimpleList<MyThreadData*> templateList;   list.Construct(offsetof(MyThreadData, pNext));   //向鏈表中加數據   for (int i=100;i<110;i++)   {     pTempData = new MyThreadData;     pTempData->nShortData = i;     templateList.AddHead(pTempData);   }    //遍歷鏈表,釋放對象占用的資源   pTempData = templateList;   while (pTempData)   {     MyThreadData* pNextTempData = pTempData->pNext;     printf("TemplateDateList=%d/n",pTempData->nShortData);     delete pTempData;     pTempData = pNextTempData;   }

希望本文所述對大家的C++程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 尼勒克县| 水富县| 资溪县| 柘荣县| 广平县| 锦屏县| 修文县| 昭平县| 四平市| 远安县| 鄂温| 安泽县| 府谷县| 綦江县| 新和县| 乐山市| 清徐县| 无锡市| 尉犁县| 峨山| 河源市| 宜州市| 安丘市| 平乐县| 龙江县| 通州市| 淳安县| 徐汇区| 台北县| 西贡区| 通城县| 延吉市| 惠东县| 湖州市| 金平| 微博| 阿拉善盟| 莆田市| 丹江口市| 桃江县| 旅游|