zoukankan      html  css  js  c++  java
  • 【编程题】编写String类的构造函数、拷贝构造函数、析构函数和赋值函数

    【编程题】编写String类的构造函数、拷贝构造函数、析构函数和赋值函数

    【题目】:请编写如下4个函数

     1 class String 
     2 { 
     3 public: 
     4      String(const char *str = NULL);// 普通构造函数 
     5      String(const String &other);    // 拷贝构造函数 
     6      ~ String(void);    // 析构函数 
     7      String & operate =(const String &other);// 赋值函数 
     8 private: 
     9      char *m_data;// 用于保存字符串 
    10 };

    【解答】

     1 //普通构造函数 
     2 String::String(const char *str) 
     3 { 
     4         if(str==NULL) 
     5         { 
     6                 m_data = new char[1]; // 得分点:对空字符串自动申请存放结束标志''的//加分点:对m_data加NULL 判断 
     7                 *m_data = ''; 
     8         }    
     9         else 
    10         { 
    11          int length = strlen(str); 
    12          m_data = new char[length+1];           // 若能加 NULL 判断则更好 
    13          strcpy(m_data, str); 
    14         } 
    15 } 
    16 // String的析构函数 
    17 String::~String(void) 
    18 { 
    19         delete [] m_data;                       // 或delete m_data; 
    20 } 
    21 //拷贝构造函数 
    22 String::String(const String &other)           // 得分点:输入参数为const型 
    23 {     
    24         int length = strlen(other.m_data); 
    25         m_data = new char[length+1];         //加分点:对m_data加NULL 判断 
    26         strcpy(m_data, other.m_data);    
    27 } 
    28 //赋值函数 
    29 String & String::operate =(const String &other) // 得分点:输入参数为const 型 
    30 {     
    31         if(this == &other)                    //得分点:检查自赋值,&别忘了
    32                 return *this;                  //*别忘了
    33         delete [] m_data;                   //得分点:释放原有的内存资源 
    34         int length = strlen( other.m_data );      
    35         m_data = new char[length+1];          //加分点:对m_data加NULL 判断 
    36         strcpy( m_data, other.m_data );   
    37         return *this;                    //得分点:返回本对象的引用  
    38 
    39 }    

    【分析】

    1.拷贝构造函数的输入参数为何要加const引用?

      http://www.cnblogs.com/engraver-lxw/p/7580403.html

    2.赋值函数的输入参数为何要加const引用,返回值为何为引用?

      http://www.cnblogs.com/engraver-lxw/p/7580598.html

     

    ——如有不对的地方,非常欢迎给予指导!

    ——【感谢】资料来源于http://www.cnblogs.com/stoneJin/archive/2011/11/01/2231358.html

  • 相关阅读:
    Linux内核分析期中总结
    Linux内核分析期末总结
    《Linux内核设计与实现》第四章读书笔记
    《Linux内核分析》第八周 进程的切换和系统的一般执行过程
    《深入理解计算机系统》第七章读书笔记
    《Linux内核设计与实现》第三章读书笔记
    "Linux内核分析"第七周
    "Linux内核分析"第六周实验报告
    “Linux内核分析”第五周报告
    Linux实验四报告
  • 原文地址:https://www.cnblogs.com/engraver-lxw/p/7580647.html
Copyright © 2011-2022 走看看