zoukankan      html  css  js  c++  java
  • String的构造函数、析构函数和赋值函数

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

    已知类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)

    {

        delete [] m_data;   // 由于m_data基本数据类型的数组,也可以写成 delete m_data;

    }

    // String的普通构造函数             

     String::String(const char *str)

    {

        if(str==NULL)                          

        {

           m_data = new char[1];    // 若能加 NULL 判断则更好

           *m_data = ;                      

        }                                          

        else

        {

           int length = strlen(str);           

           m_data = new char[length+1];  // 若能加 NULL 判断则更好      

           strcpy(m_data, str);                

        }

    }   

    // 拷贝构造函数

    String::String(const String &other)

    {   

        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)

    {   

           // (1) 检查自赋值

           if(this == &other)

               return *this;

          // (2) 释放原有的内存资源

           delete [] m_data;

           // 3)分配新的内存资源,并复制内容

        int length = strlen(other.m_data);

        m_data = new char[length+1];         // 若能加 NULL 判断则更好

           strcpy(m_data, other.m_data);

          // 4)返回本对象的引用

           return *this;

  • 相关阅读:
    第一章 经济基础知识
    105_实例
    SQL开窗函数
    Docker教程:Docker入门实践
    102_HDFS分布式文件系统
    [转]远程连接出现身份验证错误,要求的函数不受支持
    flutter创建工程指定iOS及Android开发语言
    架构师学习之路:康威定律
    智能识别客户收货地址信息
    深入理解Apache Dubbo与实战 pdf
  • 原文地址:https://www.cnblogs.com/codec/p/3788345.html
Copyright © 2011-2022 走看看