程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中CSimpleList的完成與測試實例

C++中CSimpleList的完成與測試實例

編輯:關於C++

C++中CSimpleList的完成與測試實例。本站提示廣大學習愛好者:(C++中CSimpleList的完成與測試實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C++中CSimpleList的完成與測試實例正文


本文實例講述了C++簡略列表類的完成辦法。分享給年夜家供年夜家參考。詳細辦法以下:

_AFXTLS.CPP文件以下:

//#include "StdAfx.h 
#include <stddef.h> 
#include <stdio.h> 
#include "_AFXTLS_.H" 
 
struct MyThreadData{ 
  MyThreadData* pNext; 
  int nShortData; 
}; 
 
void CSimpleList::AddHead(void *p) 
{ 
  *GetNextPtr(p)=m_pHead; 
  m_pHead = p; 
} 
 
BOOL CSimpleList::Remove(void* p) 
{ 
  BOOL bRet = FALSE; 
  if (p == NULL) 
  { 
    bRet = FALSE; 
  } 
 
  if (p == m_pHead) 
  { 
    m_pHead = GetNext(m_pHead); 
    bRet = TRUE; 
  } 
  else 
  { 
    void*  pTest; 
    pTest = m_pHead; 
    while (pTest && (GetNext(pTest) != p)) 
    { 
      pTest = GetNext(pTest); 
    } 
    if (pTest != NULL) 
    { 
      *GetNextPtr(pTest) = GetNext(p); 
      bRet = TRUE; 
    } 
  } 
  return bRet; 
 
} 
 
void main() 
{ 
  MyThreadData* pData; 
  CSimpleList list; 
  list.Construct(offsetof(MyThreadData, pNext)); 
  for (int i=0;i<10;i++) 
  { 
    pData = new MyThreadData; 
    pData->nShortData = i; 
    list.AddHead(pData); 
  } 
 
  //遍歷鏈表,釋放MyThreadData對象占用的空間 
  pData = (MyThreadData*)list.GetHead(); 
  while(pData != NULL) 
  { 
    MyThreadData* pNextData = pData->pNext; 
    printf("The value is %d\n",pData->nShortData); 
    delete pData; 
    pData = pNextData; 
  } 
} 

_AFXTLS_.H文件以下:

//#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); 
} 
 
 
#endif

願望本文所述對年夜家的C++法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved