蛋疼蕪鄙寫的String類的c++複製控制,打基礎啊打基礎,打了一生的基礎

這裏只寫了一點點,本身慢慢調試出來的,只包含了複製構造,賦值運算符和+ 的重載,但願蛋疼蕪鄙的麻油看了以後掄錘子this

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

#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]='\0';
    printf("str address %d\n",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\n",str->m_data);
    return *str;
}

String::~String()
{
//    printf("~~%s address: %d\n",this->m_data,this->m_data);
    delete []m_data;
}
相關文章
相關標籤/搜索