zoukankan      html  css  js  c++  java
  • string类的简要实现

    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    
    class mystring{
    public:
        mystring(const char *str=NULL);
        mystring(const mystring &other);
        ~mystring(void);
        mystring &operator=(const mystring &other);
        mystring &operator+=(const mystring &other);
    
        char *getString();
    private:
        char *m_data;
    };
    
    //普通构造函数
    mystring::mystring(const char *str){
        if(str==NULL){
            m_data=new char;
            *m_data='';
        }else{
            int lenth=strlen(str);
            m_data=new char[lenth+1];
            strcpy(m_data,str);
        }
    }
    
    mystring::~mystring(void){
        delete[]m_data;//m_data是内部数据类型,也可以写成delete m_data
    }
    
    //拷贝构造函数
    mystring::mystring(const mystring &other){
        //允许操作other的私有成员m_data???
        int lenth=strlen(other.m_data);
        m_data=new char [lenth+1];
        strcpy(m_data,other.m_data);
    
    }
    
    //赋值函数
    mystring &mystring::operator=(const mystring &other){
        
        //1.检测自赋值 处理 a=a的情况
        if(this==&other){
            return *this;
        }
    
        //2释放原有的内存
        delete []m_data;
    
        //3分配新的内存资源,并复制内容
        int lenth=strlen(other.m_data);
        m_data=new char[lenth+1];
        strcpy(m_data,other.m_data);
    
        //4返回本对象的引用
        return *this;
    }
    
    //赋值函数
    mystring &mystring::operator+=(const mystring &other){
    
        int left_lenth=strlen(m_data);
        int right_lenth=strlen(other.m_data);
    
        //1分配新的内存资源,并复制内容
        char *temp_data=new char[left_lenth+right_lenth+1];
        strcpy(temp_data,m_data);
        strcat(temp_data,other.m_data);
        delete []m_data;//2释放原有的内存
    
        m_data=temp_data;
    
        //3返回本对象的引用
        return *this;
    }
    
    char * mystring::getString(){
        return m_data;
    }
    
    int main()
    {
        mystring a=mystring("123456");
        mystring b=mystring(a);
        mystring c=mystring("666666");
        mystring d;
        d=c;
    
        a+=d;
        printf("%s
    ",a.getString());
        
        a+=a;
        printf("%s
    ",a.getString());
    
    }

    注意构造函数,拷贝构造函数,赋值函数,析构函数的写法

    重载的写法

    参考:高质量C++C 编程指南

  • 相关阅读:
    如何保存PDF、Word和Excel文件到数据库中
    C#添加PDF页眉——添加文本、图片到页眉
    C#数组,List,Dictionary的相互转换
    C#向PPT文档插入图片以及导出图片
    【CTSC2018】暴力写挂(边分治,虚树)
    【WC2018】通道(边分治,虚树,动态规划)
    【BZOJ2870】最长道路(边分治)
    【WC2018】州区划分(FWT,动态规划)
    【LOJ#6029】市场(线段树)
    【Hihocoder1413】Rikka with String(后缀自动机)
  • 原文地址:https://www.cnblogs.com/huhuuu/p/3460240.html
Copyright © 2011-2022 走看看