• 蛋疼芜鄙写的String类的c++复制控制,打基础啊打基础,打了一辈子的基础


    这里只写了一点点,自己慢慢调试出来的,只包含了复制构造,赋值运算符和+ 的重载,希望蛋疼芜鄙的麻油看了之后抡锤子

    /**************String.h*****************/

    #include<stdio.h>
    //#include<memory.h>
    
    
    class String
    {
        private:
            char *m_data;
            int m_len;
            int  mystrlen(const char* str );
            char* mystrcat(char*DeStr,char *srStr);
        public:
            String(const char* str=NULL);
            String(const String &onestr);
            String &operator=(const String &onestr);
            ~String();
            int StrLen();
            String &operator+(const String &onestr);    
    };
     

    /************String.cpp**********************/

    #include"String.h"
    #include<malloc.h>
    int String:: mystrlen(const char * str)
    {
        int len = 0;
        while(*str)
        {
            len++;
            str++;
        }
        return len;
    }
    
    char* String::mystrcat(char* s1,char*s2)
    {
        int len = mystrlen(s1)+mystrlen(s2);
        char *str=(char*)malloc(len+1);
        for(int i=0;i<len;i++)
        {
            if(i<mystrlen(s1))
            {
                str[i]=s1[i];
            }
            if(i>=mystrlen(s1))
            {
                str[i]=s2[i-mystrlen(s1)];
            }
        }
        str[len]='';
        printf("str address %d
    ",str);
        return str;
    }
    int String::StrLen()
    {
        m_len = mystrlen(m_data);
        return m_len;
    }
    
    
    String::String(const char *str)
    {
        if(str == NULL)
        {
            return ;
        }
        int len = mystrlen(str);
        this->m_data = new char[len+1];
        this->m_len = len;
        memcpy(this->m_data,str,len);
    }
    
    String::String(const String& str)
    {
        int len=mystrlen(str.m_data);
        this->m_data=new char[len+1];
        this->m_len = len;
        memcpy(this->m_data,str.m_data,len);
    }
    
    String &String::operator=(const String& str)
    {
        if(this==&str)
        {
            delete [] m_data;
            return *this;
        }    
        int len=mystrlen(str.m_data);
        this->m_data=new char[len+1];
        this->m_len = len;
        memcpy(this->m_data,str.m_data,len);
        return *this;
    }
    
    String &String::operator+(const String& str1)
    {
        String *str = new String();
        str->m_len = mystrlen(this->m_data)+mystrlen(str1.m_data);
        str->m_data = new char[str->m_len+1];
        str->m_data = mystrcat(this->m_data,str1.m_data);
        printf("%s
    ",str->m_data);
        return *str;
    }
    
    String::~String()
    {
    //    printf("~~%s address: %d
    ",this->m_data,this->m_data);
        delete []m_data;
    }
  • 相关阅读:
    jQuery插件开发——全屏切换插件
    原生JS实现全屏切换以及导航栏滑动隐藏及显示——修改
    CSS 3学习——animation动画
    CSS 3学习——transition 过渡
    CSS 3 学习——transform 3D转换渲染
    CSS 3学习——transform 2D转换
    消息过滤
    jms消息组成
    vim常用命令整理
    知识碎片
  • 原文地址:https://www.cnblogs.com/wanzaixiaoxin/p/3162159.html
Copyright © 2020-2023  润新知