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


     编写类 String 的构造函数、析构函数和赋值函数(25 分) 

    已知类 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 的析构函数 

    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; 

    }   

     

    不调用 C++/C 的字符串库函数,请编写函数 strcpy 

    char *strcpy(char *strDest, const char *strSrc); 

        assert((strDest!=NULL) && (strSrc !=NULL)); // 2分 

        char *address = strDest;      // 2分 

        while( (*strDest++ = * strSrc++) != ‘\0’ )  // 2分 

           NULL ;  

        return address ;        // 2分 

     

  • 相关阅读:
    linux笔记
    restful课程凌杂知识点
    Django中间件执行流程
    restful知识点之二restframework视图
    restful知识点之一CBV
    可变长参数
    函数的重点内容
    文件的高级应用及修改的两种方式
    文件的三种打开方式及with管理文件上下文
    字符编码
  • 原文地址:https://www.cnblogs.com/forlove/p/2247057.html
Copyright © 2020-2023  润新知