string类的实现(构造,拷贝构造,赋值元算符及输出流的实现)

本文介绍了一个简单的C++自定义字符串类SString的实现过程,包括构造函数、赋值运算符、相等运算符及字符串连接等功能。文章还讨论了拷贝构造函数中使用引用类型的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

string是c++的标准类库的一个字符串类,也称c++的字符串,有空的话自己实现这个类挺有意思的,当然这个类的功能是相当的强大,这里只是写了九牛一毛而已。

//sstring.h

#include <iostream>

using namespace std;

class SString
{
public:
 SString(const char *pSz=NULL);                      //构造函数
 SString(SString &str);                                          //复制构造
 ~SString(void);

 SString& operator=(const SString &str);          //赋值运算符
 bool operator==(const SString &str);                //相等运算符
 SString& operator+(const SString &str);          //字符串相连

 friend ostream &operator<<(ostream &cout, const SString &str);  // 输出流
private:
 char *m_pCh;
};

//sstring.cpp

#include "SString.h"
#include <string.h>

SString::SString( const char *pSz /*= NULL*/)
{
 if(NULL == pSz)
 {
  m_pCh = new char[1];
  *m_pCh = '\0';
 }
 else
 {
  m_pCh = new char[strlen(pSz)+1];

  if(NULL != m_pCh)
  {
   strcpy(m_pCh, pSz);
  }
 }
}

SString::SString( SString &str )
{
 m_pCh = new char[strlen(str.m_pCh)+1];
 strcpy(m_pCh, str.m_pCh);
}

SString::~SString(void)
{
 if(NULL != m_pCh)
 {
  delete []m_pCh;
 }
}

SString& SString::operator=( const SString &str )
{
 if(this == &str)
 {
  return *this;
 }

 if(NULL != m_pCh)
 {
  delete m_pCh;
 }

 m_pCh = new char[strlen(str.m_pCh)+1];

 if(this != &str)
 {
  strcpy(m_pCh, str.m_pCh);
 }
 return *this;
}

bool SString::operator==( const SString &str )
{
 if(this == &str)
 {
  return true;
 }
 return false;
}

SString& SString::operator+( const SString &str )
{
 char *pTmp = new char[strlen(m_pCh)+1];
 strcpy(pTmp, m_pCh);

 delete []m_pCh;

 m_pCh = new char[strlen(pTmp) + strlen(str.m_pCh) + 1];

 strcpy(m_pCh, pTmp);
 strcat(m_pCh, str.m_pCh);

 return *this;
}

 SString SString::operator++( int )
 {
  SString tmp =*this;
 
  ++(*this);
  return SString(tmp);
 }

 

上面的实现不难,相信大家都会,但有很多的细节需要注意的,比方说拷贝构造函数的参数为什么要用引用类型?是为了省去传值时不执行形参的拷贝吗?如果不是,那直接用类型可以吗,为什么, 用指针可以吗?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值