dedecms织梦内容管理系统      
首页 | 51单片机 | 休闲娱乐 | 手工乐园 | 免费软件 | 理财专区 | 串口通信 | UNIX/LINUX | TurboC | 专题 | 会员中心 | 支持论坛
  当前位置:主页>MFC/C++>文章内容
使用C++编写的 CString类
来源:老胡原创 作者:温柔老胡 发布时间:2007-04-27  

常有网上的朋友问如何用纯C++实现一个MFC的CString字符管理类,于是自己动写编写了一个,希望能给正在学习C++语言的朋友提供帮助。该类中使用动态内存分配,内存的移动操作,实现字符串的添加,使用的内存区在对象析构时释放。

.h 文件  类的定义

class CString
{
public:
 CString();
 CString(const CString &strTag);
 CString(const char* szTag);

 virtual ~CString();
 
public:
 char* GetBuffer();

public:
 CString& operator=(const char* strTag);
 CString& operator=(const CString& strTag);
 CString& operator+(const char* szAdd);
 CString& operator+(const CString& strTag);

public:
 void InitData(const char* szInit);
 friend ostream& operator<< ( ostream& os, const CString& strOut );

private:
 char* m_pszData;
 int m_nBufLen;
};

 

.CPP 文件

#include "CString.h"


CString::CString()
{
 m_pszData=NULL;
 m_nBufLen = 1;
 m_pszData = new char[m_nBufLen];
 m_pszData[0] = '';
}

CString::~CString( )
{
 if( m_pszData )
 {
  delete m_pszData;
  m_pszData = NULL;
  m_nBufLen = 0;
 }
}

void CString::InitData(const char *szInit)
{
 if( m_pszData )
 {
  delete m_pszData;
  m_pszData = NULL;
  m_nBufLen = 0;
 }
 
 int nLen = strlen(szInit);
 m_pszData = new char[nLen+1];
 if( m_pszData )
 {
  strncpy(m_pszData,szInit,nLen);
  m_pszData[nLen] = '';
  m_nBufLen = nLen+1;
 }
}

CString::CString(const CString &strTag)
{
 m_pszData=NULL;
 m_nBufLen = 0;
 InitData(strTag.m_pszData);
}

CString::CString(const char* szTag)
{
 m_pszData=NULL;
 m_nBufLen = 0;
 InitData(szTag);
}

CString& CString::operator +(const char* szAdd)
{
 int nLenthis = strlen(m_pszData);
 int nLenAdd = strlen(szAdd);
 char* pAdd = new char[nLenthis+nLenAdd+1];
 strncpy(pAdd,m_pszData,nLenthis+1);
 strcat(pAdd,szAdd);

 static CString strAdd;
 strAdd = pAdd;
 delete pAdd;

 return strAdd;
}

CString& CString::operator+(const CString& strTag)
{
 return operator+(strTag.m_pszData);
}


CString& CString::operator =(const char *szTag)

 int nTagLen = strlen(szTag);
 char* pszAdd = new char[nTagLen+1];
 if( pszAdd )
 {
  strncpy(pszAdd,szTag,nTagLen+1);
  m_nBufLen = nTagLen+1;

  delete m_pszData;
  m_pszData = pszAdd;
 }
 return *this;
}

CString& CString::operator =(const CString &strTag)
{
 return operator=(strTag.m_pszData);
}

ostream& operator<< ( ostream& os, const CString& strOut )
{
 os<<strOut.m_pszData;
 return os;
}

char* CString::GetBuffer()
{
 return m_pszData;
}

///////////////////////////////////////////////////////////////////////
//
//   测试程序 The test program
//

void main()
{
 CString str1("Hello");
 CString str2("world!");
 CString str3;
 
 cout<<http://WWW.5D232.COM   mailto: Wenjin@5D232.com<<endl;
 cout<<"Class CString by Wenjin 2005.3"<<endl;
 cout<<"----------------------------------------"<<endl;
 cout<<"define CString str1("Hello");"<<endl;
 cout<<"define CString str2("world!");"<<endl;
 cout<<"define CString str3;"<<endl<<endl;
 cout<<"Para str1 = "<<str1<<endl;
 cout<<"Para str2 = "<<str2<<endl;
 cout<<"Para str3 = "<<str3<<endl<<endl;

 cout<<"str1 + ' ' + str2 = "<<str1+" "+str2<<endl<<endl;
 cout<<"Do str3=str1+' '+str2"<<endl;
 str3 = str1+" "+str2;
 cout<<"Now str3 = "<<str3<<endl<<endl;

 cout<<"Now define CString str4(str3);"<<endl;
 CString str4(str3);
 cout<<"Para str4 = "<<str4<<endl<<endl;
 cout<<"Output ended.Press enter to quit"<<endl;
 cin.peek();
}

说明:本文最早发布于 http://blog.csdn.net/Saimen 现转到本人网站,如果其它站转载,请标明出处为 http://www.5d232.com


(阅读次数:
上一篇:没有了   下一篇:使用C++编写的 双向链表C++类
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·使用C++编写的 双向链表C++类
·RichEditCtrl 使用方法
·对话框中使用ToolBar最简方法
·CRichEdit 动态加入带有格式的文
·对话框中使用ToolBar并显示Tools
  相关文章
·使用C++编写的 双向链表C++类
·对话框中使用ToolBar最简方法
·对话框中使用ToolBar并显示Tools
·CRichEdit 动态加入带有格式的文
·RichEditCtrl 使用方法

 Powered by 温柔老胡 System by www.dedecms.com