Chinaunix首页 | 论坛 | 博客
  • 博客访问: 242801
  • 博文数量: 253
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-21 12:29
文章分类

全部博文(253)

文章存档

2014年(253)

我的朋友

分类: C/C++

2014-09-21 12:55:09

已知类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)               // 3
 
{
 
    delete [] m_data;                     
 
// 由于m_data是内部数据类型,也可以写成 delete m_data;
 
       }
 
 
       // String的普通构造函数            
       String::String(const char *str)      // 6
 
{
 
    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)   // 3
 
    {  
 
    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)    // 13
 
    {  
 
       // (1) 检查自赋值                     // 4
 
       if(this == &other)
 
           return *this;
 
   
 
// (2) 释放原有的内存资源            // 3
 
       delete [] m_data;
 
      
 
       // 3)分配新的内存资源,并复制内容 // 3分
 
    int length = strlen(other.m_data);
 
    m_data = new char[length+1];         // 若能加 NULL 判断则更好
 
       strcpy(m_data, other.m_data);
 
      
 
       // 4)返回本对象的引用            // 3
 
       return *this;
 
}
阅读(314) | 评论(0) | 转发(0) |
0

上一篇:*new delete

下一篇:*strcpy函数

给主人留下些什么吧!~~