一个完整的String类定义以及测试
//---------------------------------------------------------------------------
#include <iostream>
#include "stdio.h"
#include "malloc.h"
#include "string.h"
#include <assert.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
using namespace std;
class String
{
public:
String(char* ptr=NULL)
{
if(ptr==NULL)
{
ptr=new char[1];
ptr[0]='/0';
}
else
{
assert(m_data!=NULL);
int length=strlen(ptr);
m_data=new char[length+1];//使用指针前一定要分配空间。
strcpy(m_data,ptr);
}
}
String(const String& other)
{
int length=strlen(other.m_data);
m_data=new char[length+1];
assert(m_data!=NULL);
strcpy(m_data,other.m_data);
}
String& operator=(String& other)
{
if(this==&other)
return *this;
delete []m_data;
int length=strlen(other.m_data);
m_data=new char[length+1];
assert(m_data!=NULL);
strcpy(m_data,other.m_data);
}
~String()
{
delete []m_data;
}
const char& operator[](int index)
{
int i=0;
while(i++<index);
return *(m_data+i);
}
String& operator+(String& str2)
{
int len1=strlen(this->m_data);
int len2=strlen(str2.m_data);
char* str=new char[len1+len2+1];
strcpy(str,this->m_data);
char* temp=str+len1;
while((*temp++=*str2.m_data++)!='/0')
this->m_data=str;
return *this;
}
int length()
{
return strlen(m_data);
}
friend ostream& operator<<(ostream& os,String& data)
{
os<<data.m_data;
return os;
}
private:
char* m_data;
};
int main(int argc, char* argv[])
{
String str1("Hello,");
String str2("World!");
str1=str1+str2;
cout<<str1<<endl;
cout<<str1.length()<<endl;
String str3("hello ,world!");
cout<<str3[8]<<endl;
system("pause");
return 0;
}
//---------------------------------------------------------------------------