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