• 【编程题】编写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(const char *str)
    {
            if(str==NULL)
            {
                    m_data = new char[1]; // 得分点:对空字符串自动申请存放结束标志''的//加分点:对m_data加NULL 判断
                    *m_data = '';
            }
            else
            {
             int length = strlen(str);
             m_data = new char[length+1];           // 若能加 NULL 判断则更好
             strcpy(m_data, str);
            }
    }
    // String的析构函数
    String::~String(void)
    {
            delete [] m_data;                       // 或delete m_data;
    }
    //拷贝构造函数
    String::String(const String &other)           // 得分点:输入参数为const型
    {
            int length = strlen(other.m_data);
            m_data = new char[length+1];         //加分点:对m_data加NULL 判断
            strcpy(m_data, other.m_data);
    }
    //赋值函数
    String & String::operate =(const String &other) // 得分点:输入参数为const 型
    {
            if(this == &other)                    //得分点:检查自赋值,&别忘了
                    return *this;                  //*别忘了
            delete [] m_data;                   //得分点:释放原有的内存资源
            int length = strlen( other.m_data );
            m_data = new char[length+1];          //加分点:对m_data加NULL 判断
            strcpy( m_data, other.m_data );
            return *this;                    //得分点:返回本对象的引用
    
    }
    
  • 相关阅读:
    重装window7系统(使用U盘)
    冒泡排序
    使用jad进行反编译.class文件生成.java
    java代码编写1+2+3+....+100之和
    springboot多模块项目不同模块组件不能@autowired问题
    django CBV和FBV写法总结
    django cookie与session组件
    djjango cookie和session 的几种常用需求使用方法
    django 一个关于分组查询的问题分析
    Django book manage system
  • 原文地址:https://www.cnblogs.com/wsl-hitsz/p/13936925.html
Copyright © 2020-2023  润新知