String的构造函数、析构函数和赋值函数

编写类String的构造函数、析构函数和赋值函数

已知类String的原型为:

class String

{

      public:

        String(const char *str = NULL); // 普通构造函数

        String(const String &other);        // 拷贝构造函数

        ~ String(void);                     // 析构函数

        String & operate =(const String &other);    // 赋值函数

      private:

        char    *m_data;                // 用于保存字符串

};

请编写String的上述4个函数。

标准答案:

// String的析构函数

String::~String(void)

{

    delete [] m_data;   // 由于m_data基本数据类型的数组,也可以写成 delete m_data;

}

// String的普通构造函数             

 String::String(const char *str)

{

    if(str==NULL)                          

    {

       m_data = new char[1];    // 若能加 NULL 判断则更好

       *m_data = \0;                      

    }                                          

    else

    {

       int length = strlen(str);           

       m_data = new char[length+1];  // 若能加 NULL 判断则更好      

       strcpy(m_data, str);                

    }

}   

// 拷贝构造函数

String::String(const String &other)

{   

    int length = strlen(other.m_data);

    m_data = new char[length+1];      // 若能加 NULL 判断则更好    

    strcpy(m_data, other.m_data);         

}

// 赋值函数

String & String::operate =(const String &other)

{   

       // (1) 检查自赋值

       if(this == &other)

           return *this;

      // (2) 释放原有的内存资源

       delete [] m_data;

       // 3)分配新的内存资源,并复制内容

    int length = strlen(other.m_data);

    m_data = new char[length+1];         // 若能加 NULL 判断则更好

       strcpy(m_data, other.m_data);

      // 4)返回本对象的引用

       return *this;

posted on 2014-06-14 15:51  码哥@杭州  阅读(231)  评论(0编辑  收藏  举报