.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] = '\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] = '\0';
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.5701.COM EM:Wenjin@5701.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();
}