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; // 用于保存字符串
    };

    #include <iostream>
    class String
    {
    public:
        String(const char *str=NULL);//普通构造函数
        String(const String &str);//拷贝构造函数
        String & operator =(const String &str);//赋值函数
        ~String();//析构函数
    protected:
    private:
        char* m_data;//用于保存字符串
    };
    
    //普通构造函数
    String::String(const char *str)
        {
        if (str==NULL)
            {
            m_data=new char[1]; //对空字符串自动申请存放结束标志''的空间
            if (m_data==NULL)
                {//内存是否申请成功
            std::cout<<"申请内存失败!"<<std::endl;
            exit(1);
            }
            m_data[0]='';
        }
        else
            {
            int length=strlen(str);
            m_data=new char[length+1];
            if (m_data==NULL)
                    {//内存是否申请成功
                std::cout<<"申请内存失败!"<<std::endl;
                exit(1);
            }
            strcpy(m_data,str);
        }
    }
    
    //拷贝构造函数
    String::String(const String &str)
    { //输入参数为const型
        int length=strlen(str.m_data);
        m_data=new char[length+1];
        if (m_data==NULL)
            {//内存是否申请成功
            std::cout<<"申请内存失败!"<<std::endl;
            exit(1);
        }
        strcpy(m_data,str.m_data);
    }
    //赋值函数
    String& String::operator =(const String &str)
    {//输入参数为const型
        if (this==&str) //检查自赋值
            return *this;
        int length=strlen(str.m_data);
        delete [] m_data;//释放原来的内存资源
        m_data= new char[length+1];
        if (m_data==NULL)
            {//内存是否申请成功
            std::cout<<"申请内存失败!"<<std::endl;
            exit(1);
        }
        strcpy(m_data,str.m_data);
        return *this;//返回本对象的引用
    }
    
    //析构函数
    String::~String()
    {
        delete [] m_data;
    }
    
    void main(){
        String a;
        String b("abc");
        system("pause");
    }                                             

    原始文章:http://blog.csdn.net/zhuimengzh/article/details/6708882

  • 相关阅读:
    Nhibernate 简单实例(一)
    Sql 行转列
    EasyUI TreeGrid 的使用
    MSMQ消息队列的简单使用
    实体类与DataTable互换
    给Config的appSettings节点赋值
    Angular js (2)
    Angular JS 入门
    用Aspose.Cells 导出为自定义格式的excel
    【多线程学习笔记整理】002_线程的停止、暂停、与yield
  • 原文地址:https://www.cnblogs.com/wanghaoran/p/3800097.html
Copyright © 2011-2022 走看看