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:[email protected]"<<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();
}
{
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:[email protected]"<<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();
}
解决方案 »
- hook connect异步的问题,写个简单的代理,hook connect,然后修改ip和端口,连接到socks5,但是 connect时候返回-1、
- CTreeCtrl设为子树的问题,求助。
- 关于对话框滚动条与动态创建控件的问题
- 用VC通过ADO调用oracle存储过程返回TCursor, 不会接收TCursor
- 寻求帮助
- 请问如何能让HTTP支持断点续传?
- filetime类型的变量怎样进行比较
- 关于com对象的线程模型的疑惑???
- 分分分分分分分分分分分分分分分分分分分分分~~~~~
- VC怎么获得COM方法的[out] BSTR参数
- 文件对话框打开问题!
- 请教图形学的学习方法 数学基础 知识块
可能只好用static变量了,难道用static变量不好吗?多这么一点内存消耗应该不是问题吧。楼主对CString封装的还真不错。只要愿意,楼主还可以多增加一些好用的成员函数,造福人类哟。不过MFC中CString应该够用了。多写写可以提高水平。
比如我写个函数:
func(CString strArg){}
调用时即使:func("abc")也是可以的。
这是什么原因?是构造函数CString::CString(LPCTSTR lpsz)
还是操作符重载const CString& CString::operator=(LPCTSTR lpsz)
使然?
_AFX_INLINE CString::operator LPCTSTR() const
{ return m_pchData; }
的 作用把
可能只好用static变量了,难道用static变量不好吗?多这么一点内存消耗应该不是问题吧。
我认为有内存占用而不释放始终还是不对的
但是最好.把 char 改为 wchar_t不要在用这个char了.
{
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 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); CString strAdd;
strAdd = pAdd;
delete pAdd; return strAdd;
}
{
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;
}恶心的写法!
{
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); CString strAdd;
strAdd = pAdd;
delete pAdd; return strAdd;
}
更恶心的写法!