自己实现的string类

作者在 2008-08-17 10:40:22 发布以下内容
#ifndef STRING_H
#define STRING_H
#include<iostream>
using namespace std;
class String{
 friend ostream&operator<<(ostream& os,String& str)
 {
  os<<str.m_data;
  return os;
 }
 public:
  String(const char* str=NULL);
  String(const String& str);
  int size(const String& str);
  String operator+(const String& str);
  String& operator=(const String& str);
  bool operator==(const String& str);
  ~String(void) {delete[] m_data;}
 
 protected:
  char* m_data;
};
inline String::String(const char* str)
{
   if(!str)
   {
   m_data=NULL;
   }
   else
   {
    m_data=new char[strlen(str)+1];
    strcpy(m_data,str);
   }
}
inline String::String(const String& str)
{
 if(!str.m_data)
 {
  m_data=NULL;
 }
 else
 {
  m_data=new char[strlen(str.m_data)+1];
  strcpy(m_data,str.m_data);
 }
}
inline int String::size(const String& str)
{
 if(!str.m_data)
 {
  return 0;
 }
 else
 {
  return (int) strlen(str.m_data);
 }
}
inline String String::operator +(const String& str)
{
 String newstr;
 if(!str.m_data)
 {
  newstr=*this;
 }
 else if(!m_data)
 {
  newstr=str;
 }
 else
 {
  newstr.m_data= new char[strlen(this->m_data)+strlen(str.m_data)+1];
  strcpy(newstr.m_data,m_data);
  strcat(newstr.m_data,str.m_data);
 }
 return newstr;
}
 inline String& String::operator=(const String& str)
{
    if (this!=&str)
    {
        delete[] m_data;
        if(!str.m_data) m_data=0;
        else
        {
            m_data = new char[strlen(str.m_data)+1];
            strcpy(m_data,str.m_data);
        }
 }
    return *this;
}
 inline bool String::operator==(const String &str)    
{
    if ( strlen(str.m_data) != strlen(m_data) )
        return false;
    return strcmp(m_data,str.m_data)?false:true;
}
#endif
vc技术 | 阅读 3595 次
文章评论,共0条
游客请输入验证码
浏览30780次
最新评论