zoukankan      html  css  js  c++  java
  • 编写类 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分 

     

  • 相关阅读:
    sync.waitGroup的wait可以多次wait,同时通知
    广播与服务(2)
    Android中的广播与服务(包含代码)
    Android的Activity的页面跳转和数据传递
    Android基础4(get、post乱码解决、Asynchttpclient的GET_POST访问网络、上传文件、多线程下载、多线程下载的Android移植、XUtils实现多线程下载)
    Android3的知识点补充
    Android基础3(数据库创建、增删改查、事务、listView)
    Android基础2(包含测试、保存数据、获取目录等)
    关于Android的基础概念
    c++与c几点比较
  • 原文地址:https://www.cnblogs.com/forlove/p/2247057.html
Copyright © 2011-2022 走看看