|
|
我想写个String类
class String
{
private:
char *m_sData;
wchar_t *CovToWChar()
{
wchar_t *ws = new wchar_t[Length() + 1];
MultiByteToWideChar(CP_ACP, 0, m_sData, -1, ws, (int)Length());
return ws;
}
protected:
void SetData(const char *s)
{
if (m_sData)
delete [] m_sData;
m_sData = new char[strlen(s) + 1];
memcpy(m_sData, s, strlen(s) + 1);
}
void Cat(const char *s)
{
SetLength(Length() + strlen(s));
strcat(m_sData, s);
}
public:
String()
{
m_sData = new char[1];
Clear();
}
String(const char *s)
{
m_sData = NULL;
SetData(s);
}
String(const String &s)
{
m_sData = NULL;
SetData(s.m_sData);
}
virtual ~String()
{
delete [] m_sData;
}
void Clear()
{
if (m_sData)
m_sData[0] = 0;
}
operator char*()
{
return m_sData;
}
String& operator = (const char *s)
{
SetData(s);
return *this;
}
bool operator == (const char *s)
{
return (strcmp(m_sData, s) == 0);
}
bool operator != (const char *s)
{
return (strcmp(m_sData, s) != 0);
}
inline String operator + (const char *s)const
{
String str(m_sData);
str.Cat(s);
return str;
}
inline String operator + (const String &s)const
{
String str(m_sData);
str.Cat(s.m_sData);
return str;//到了这里的时候str回被析构了!
}
char& operator [](const size_t Index)
{
return m_sData[Index];
}
size_t Length()
{
return strlen(m_sData);
}
void SetLength(const size_t len)
{
char *pm = m_sData;
m_sData = new char[len + 1];
m_sData[0] = 0;
strcat(m_sData, pm);
delete [] pm;
}
};
使用时
String s1, s2, s3;
s1 = '123';
s2 = 'ABC';
s3 = s2 + s1;//这里就会报错 |
|