重写String类

class MyString {
public:
    MyString(const char * str = NULL);//普通构造函数
    MyString(const MyString &oter);//拷贝构造函数
    ~MyString(void);//析构函数
    MyString & operator = (const MyString &other);//赋值函数
private:
    char *m_data;
};

MyString::MyString(const char * str)
{
    cout << "default constructor!" << endl;
    if (!str) {
        m_data = new char[1];
        m_data = '\0';
    }
    else {
        m_data = new char[strlen(str) + 1];
        strcpy(m_data, str);
    }
}

MyString ::~MyString(void)
{
    cout << "default destructor!" << endl;
    delete[] m_data;
}

MyString & MyString::operator=(const MyString & other)
{
    cout << "fuzhi constructor!" << endl;
    if (this == &other)
        return *this;

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

MyString::MyString(const MyString &other) {
    cout << "copy constructor!" << endl;
    m_data = new char[strlen(other.m_data) + 1];
    strcpy(m_data, other.m_data);
}

int main()
{
    MyString str("wangshan");

    MyString b = "muhaha";
    b = str;

}

 

posted on 2017-03-02 21:22  123_123  阅读(252)  评论(0编辑  收藏  举报