蛋疼芜鄙写的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;
}
原文地址:https://www.cnblogs.com/wanzaixiaoxin/p/3162159.html