您的位置:首页 > 编程语言 > C语言/C++

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

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

/**************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]='\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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: