|
常有网上的朋友问如何用纯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
(阅读次数:)
|