复现String类(持续更新)

2020/1/13

 

#ifndef __MYSTRING__
#define __MYSTRING__

#include <cstring>
#include <iostream>
using namespace std;

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

inline
mystring::mystring(const char * cstr)
{
    if (cstr) {
        m_data = new char[strlen(cstr) + 1];
        strcpy(m_data, cstr);
    }

    else {
        m_data = new char[1];
        *m_data = '\0';
    }
}

inline
mystring::~mystring()
{
    delete[] m_data;
}

inline
mystring::mystring(const mystring& str)
{
    m_data = new char[strlen(str.m_data) + 1];
    strcpy(m_data, str.m_data);
}

inline mystring&
mystring::operator = (const mystring& 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;

}

ostream& operator<<(ostream& os, const mystring& str)
{
    os << str.get_c_str();
    return os;
}




#endif // !__MYSTRING__

 

上一篇:linux(Debian)下安装与MySql的安装、卸载、配置及使用


下一篇:2021.1.13 (含Gtest第二个sample)