处女贴!一个简单的字符串类,请各位朋友帮忙指教~
刚刚写了一个简单的字符串类,是老师布置的51假期练习!
从今年一月低 开始学习 C/C++ 到现在快4个月了!
也不知道自己写的代码会存在那些BUG
所以发到这里请 大家指教!~
大家一定要通俗的说出不足之处哈,不然我听不明白的!
小弟感激不尽!
MyString.H文件
#pragma once
//类名:字符串类
//作用:管理字符串
class CMyString
{
public:
CMyString(void);
CMyString(const char* pSrc);
CMyString(CMyString& pSrc);
~CMyString(void);
//!重载运算符 =
//!用于直接给对象 赋值char型数据
void operator =(const char* pSrc);
//!重载运算符 =
//!用于直接给对象 赋值 另一个对象
void operator =(CMyString& pSrc);
//!重载运算符 +
//!用于将对象 与char型数据 相加
//!返回新的对象
CMyString operator +(const char* pSrc);
//!重载运算符 +
//!用于将对象 与另一个对象 相加
//!返回新的对象
CMyString operator +(CMyString& pSrc);
//!重载运算符 +=
//!用于直接给对象 连接char型数据
void operator +=(const char* pSrc);
//!重载运算符 +=
//!用于直接给对象 连接 另一个对象
void operator +=(CMyString& pSrc);
//!返回数据首地址
inline const char* str()
{return m_szData;}
//!返回数据长度
inline size_t size()
{return m_iSize;}
private:
//!取得参数的数据长度
size_t length(const char* pSrc);
//!把pSrc指向的数据拷贝到pDst指向的存储区
bool copyData(char* pDst,const char* pSrc);
//!增加存储区的长度
bool addSize(size_t iSize);
//!增加储区的数据
void addData(size_t iSize,const char* pSrc);
private:
//!数据存储区
char* m_szData;
//!数据长度记录
size_t m_iSize;
};
MyString.CPP文件
#include "MyString.h"
CMyString::CMyString(void)
{
//!初始类变量
//!建立长度为1的数据存储区
m_szData = new char;
//!赋予存储区一个结束符
*m_szData = '\0';
//!长度记录设为 0
m_iSize = 0;
}
CMyString::CMyString(const char* pSrc)
{
//!添加数据
addData(length(pSrc),pSrc);
}
CMyString::CMyString(CMyString& pSrc)
{
//!添加数据
addData(pSrc.size(),pSrc.str());
}
CMyString::~CMyString(void)
{
//!对象失效时释放存储区
delete []m_szData;
}
//!重载运算符 =
//!用于直接给对象 赋值char型数据
void CMyString::operator =(const char *pSrc)
{
//!删除旧数据
delete []m_szData;
//!添加数据
addData(length(pSrc),pSrc);
}
//!重载运算符 =
//!用于直接给对象 赋值 另一个对象
void CMyString::operator =(CMyString &pSrc)
{
//!删除旧数据
delete []m_szData;
//!添加数据
addData(pSrc.size(),pSrc.str());
}
//!重载运算符 +
//!用于将对象 与char型数据 相加
//!返回新的对象
CMyString CMyString::operator +(const char* pSrc)
{
//!如果参数为空
//!返回本地对象
if(!pSrc)
return *this;
//!建立一个临时对象
//!用来连接两个数据
CMyString Tmp = *this;
Tmp += pSrc;
return Tmp;
}
//!重载运算符 +
//!用于将对象 与另一个对象 相加
//!返回新的对象
CMyString CMyString::operator +(CMyString& pSrc)
{
//!如果参数数据长度为 0
//!返回本地对象
if(!pSrc.size())
return *this;
//!建立一个临时对象
//!用来连接两个数据
CMyString Tmp = *this;
Tmp += pSrc;
return Tmp;
}
//!重载运算符 +=
//!用于直接给对象 连接char型数据
void CMyString::operator +=(const char* pSrc)
{
//!如果数据为空 返回
if(!pSrc)
return;
//!得到数据长度
size_t iSize = length(pSrc);
//!增加存储区长度
addSize(iSize);
//!拷贝数据到存储区
copyData(m_szData+m_iSize,pSrc);
//!更新数据长度记录
m_iSize += iSize;
}
//!重载运算符 +=
//!用于直接给对象 连接 另一个对象
void CMyString::operator +=(CMyString& pSrc)
{
//!得到数据长度
size_t iSize = pSrc.size();
//!如果数据长度为0 返回
if(!iSize)
return;
//!增加存储区长度
addSize(iSize);
//!拷贝数据到存储区
copyData(m_szData+m_iSize,pSrc.str());
//!更新数据长度记录
m_iSize += iSize;
}
//!取得参数的数据长度
size_t CMyString::length(const char* pSrc)
{
//!如果数据为空 返回 0
if (!pSrc)
return 0;
//!声明一个临时指针 等于 数据起始地址
const char* pTmp = pSrc;
//!临时指针循环自加 到指向'\0'时结束
while(*pTmp++ != '\0');
//!返回
//!临时指针 减去 起始地址 再减结束符长度 的值
//!即为数据长度
return pTmp - pSrc -1;
}
//!把pSrc指向的数据拷贝到pDst指向的存储区
bool CMyString::copyData(char *pDst, const char *pSrc)
{
//!如果数据为空 返回 假
if (!pDst || !pSrc)
return false;
//!循环拷贝数据到结束符'\0'为止
while((*pDst++ = *pSrc++) != '\0');
//!返回 真
return true;
}
//!增加存储区的长度
bool CMyString::addSize(size_t iSize)
{
//!判断新增加的长度 =0 时返回假
if(!iSize)
return false;
//!建立一个新存储区
//!新存储长度 等于 旧数据长度 + 新增长度 + 结束符长度
char* pTemp = new char[m_iSize + iSize +1];
//!拷贝旧数据到新数据存储区
copyData(pTemp,m_szData);
//!删除旧数据
delete []m_szData;
//!旧存储区指针 指向 新存储区
m_szData = pTemp;
//!成功返回 真
return true;
}
//!增加储区的数据
void CMyString::addData(size_t iSize,const char* pSrc)
{
//!得到数据长度
m_iSize = iSize;
//!建立数据存储区
m_szData = new char[m_iSize+1];
//!拷贝数据
copyData(m_szData,pSrc);
}