zoukankan      html  css  js  c++  java
  • string类的具体实现

    bigThree,注意拷贝构造函数的写法。

    #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];
          strcpy(m_data, cstr);
       }
       else {   
          m_data = new char[1];
          *m_data = '';
       }
    }
    
    inline
    String::~String()
    {
       delete[] m_data;
    }
    
    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::operator=(cosnt String& str){
        if(this != &str){
            String strTmp(str);
            char* pTmp = str.m_data;
            strTmp.m_data = m_data;
            m_data = pTmp;
        }
        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
  • 相关阅读:
    HDU5873
    HDU5874
    HDU1565(状态压缩dp)
    POJ2774(二分+哈希)
    HDU4474
    HDU2602(背包)
    单链表
    POJ2503(hash)
    POJ1200(hash)
    顺序表
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8656530.html
Copyright © 2011-2022 走看看