Chinaunix首页 | 论坛 | 博客
  • 博客访问: 189411
  • 博文数量: 54
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 630
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-02 18:41
文章分类

全部博文(54)

文章存档

2011年(1)

2009年(30)

2008年(23)

我的朋友

分类: C/C++

2008-12-13 21:37:54

这个题目来自高质量编程一书,确实是经典题,很多公司都喜欢考。

 

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

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

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

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

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

};

String::String(const char *str)
{
    if(str == NULL)
    {
        m_data = new char[1];
        *m_data = '\0';
    }
    else
    {
        int length = strlen(str);
        m_data = new char[length + 1]; //记得是length+1,末尾需要一个'\0'

        strcpy(m_data, str); //拷贝数据

    }
}

String::String(const String &other)
{
    int length = strlen(other.m_data);
    m_data = new char[length + 1]; //记得是length+1,末尾需要一个'\0'

    strcpy(m_data, other.m_data); //拷贝数据

}

String::~String()
{
    delete[] m_data;
}

String & String::operator=(const String &other)
{
    if(this == &other) //自检,这一步很容易漏掉

        return *this;

    delete[] m_data; //先释放掉原来的资源,再用来存放新数据


    int length = strlen(other.m_data);
    m_data = new char[length + 1]; //记得是length+1,末尾需要一个'\0'

    strcpy(m_data, other.m_data); //拷贝数据


    return *this;
}

阅读(649) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~