Chinaunix首页 | 论坛 | 博客
  • 博客访问: 22745
  • 博文数量: 11
  • 博客积分: 1421
  • 博客等级: 上尉
  • 技术积分: 110
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-05 20:17
文章存档

2011年(1)

2010年(1)

2009年(9)

我的朋友
最近访客

分类:

2009-10-20 21:25:12

参考高质量C++/C编程指南

已知类String 的原型为

class String

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

    ~String();    //析取函数

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

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

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

    
};

// String的普通构造函数


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];
        
        strcpy(m_data, str);
        
    }
    
}



// String的析构函数


String::~String(void)

{
    
    delete [] m_data;
    
    // 由于m_data是内部数据类型,也可以写成 delete m_data;

    
}


// 拷贝构造函数


String::String(const String &other)

{
    
    // 允许操作other的私有成员m_data

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



// 赋值函数


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

{
    
    // (1) 检查自赋值

    
    if(this == &other)    //注意不要错写成为if( *this == other)

        
        return *this;
    
    
    
    // (2) 释放原有的内存资源

    
    delete [] m_data;
    
    
    
    // (3)分配新的内存资源,并复制内容

    
    int length = strlen(other.m_data);
    
    m_data = new char[length+1];
    
    strcpy(m_data, other.m_data);
    
    
    
    // (4)返回本对象的引用

    
    return *this;
    
}


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