当前位置: 首页 > 编程笔记 >

C++中CSimpleList的实现与测试实例

巫马翰翮
2023-03-14
本文向大家介绍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++程序设计有所帮助。

 类似资料:
  • 我是一个使用NUnit集成测试Asp Core2.2的新手,我已经有了核心RESTful Api,但不知道如何配置NUnit来实现集成测试。通常,我使用Migration文件夹中的配置文件实现它,如下所示,但在ASP Core2.2中不存在,我不知道有什么新的替代方案。 所以,如果你不明白我的问题,我只需要一个明确的链接,使用NUnit集成测试与.NET Core2.2。

  • 我在我的项目中使用Selenium与C#和MS测试框架进行自动化。我使用了有序测试...在有序测试中添加了一些测试并执行了它,但它失败了,因为它无法打开浏览器。 我已经在属性中把我的浏览器打开和URL打开代码放在一个类中,但没有放在属性中,所以我不能在有序测试中添加那些浏览器初始化方法。 我想优先考虑来自不同.cs类的不同方法。

  • 我有一个接口,例如: 以及我试图测试的该接口的几个实现(例如、、)。 我的许多测试方法实际上是为了确保接口被正确实现,因此在每个实现中都是重复的。在JUnit3中,一个常见的解决方案是创建一个基类(扩展),然后由每个实现类对其进行子类化。但是对于JUnit4来说,这是正确的方法吗? 在(我相信)优先顺序的升序中可能的选择: > 剪切'n'粘贴重复的测试方法。一点也不枯燥,但我想测试中的担忧比生产代

  • 本文向大家介绍C语言栈的表示与实现实例详解,包括了C语言栈的表示与实现实例详解的使用技巧和注意事项,需要的朋友参考一下 1.基本概念: C语言的栈是指限定仅在表尾进行插入和删除操作的线性表。 栈作为C语言中一种常用的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一

  • 4.3.5 自底向上实现与单元测试 自顶向下设计设计是创建层次化的模块结构的过程,而从实现的角度看,我们又是采取了相反的过程,即自底向上的实现。从结构图的底层开始实现每一个函数,然后上一层模块 自然得到实现。就这样自底向上,直至主程序得到完全的实现。 在模块化编程中,测试程序最适合采用单元测试技术,即先分别测试每一个小模块,然 后再逐步测试较大的模块,直至最后测试完整程序。以 calendar 程