字符串类 class string

#ifndef __MYSTRING__
#define __MYSTRING__

class String
{
public:                                 
   String(const char* cstr=0); //构造函数
   String(const String& str);  //拷贝构造函数
   String& operator=(const String& str);  //拷贝复制函数
   ~String();                                    
   char* get_c_str() const { return m_data; }
private:
   char* m_data;
};

#include <cstring>

inline
String::String(const char* cstr)  //构造函数
{
   if (cstr)  //判断内容是否为空
   {
      m_data = new char[strlen(cstr)+1];  //多出'\0'的位置
      strcpy(m_data, cstr); //字符串复制
   }
   else {   
      m_data = new char[1];
      *m_data = '\0'; //加'\0'
   }
}

inline
String::~String()
{
   delete[] m_data;  //delete数组要加[]
}

inline
String& String::operator=(const String& str)//拷贝复制函数
{
   if (this == &str) //避免自我复制,释放自己的内存
      return *this; //返回值

   delete[] m_data;
   m_data = new char[ strlen(str.m_data) + 1 ];
   strcpy(m_data, str.m_data);
   return *this;
}

inline
String::String(const String& str) //拷贝构造函数
{
   m_data = new char[ strlen(str.m_data) + 1 ];
   strcpy(m_data, str.m_data);
}

#include <iostream>
using namespace std;

ostream& operator<<(ostream& os, const String& str) // 运算符<<重载(非成员函数)
{
   os << str.get_c_str();
   return os;
}

#endif
上一篇:2021-09-18


下一篇:类(传入的形参为指针形式)-字符串的实现