String 類的原型如下
class String
{
public:
String(const char *str=NULL); //構造函數(shù)
String(const String &other); //拷貝構造函數(shù)
~String(void); //析構函數(shù)
String& operator=(const String &other); //等號操作符重載
ShowString();
private:
char *m_data; //指針
};
String::~String()
{
delete [] m_data; //析構函數(shù),釋放地址空間
}
String::String(const char *str)
{
if (str==NULL)//當初始化串不存在的時候,為m_data申請一個空間存放'\0';
{
m_data=new char[1];
*m_data='\0';
}
else//當初始化串存在的時候,為m_data申請同樣大小的空間存放該串;
{
int length=strlen(str);
m_data=new char[length+1];
strcpy(m_data,str);
}
}
String::String(const String &other)//拷貝構造函數(shù),功能與構造函數(shù)類似。
{
int length=strlen(other.m_data);
m_data=new [length+1];
strcpy(m_data,other.m_data);
}
String& String::operator =(const String &other)
{
if (this==&other)//當?shù)刂废嗤瑫r,直接返回;
return *this;
delete [] m_data;//當?shù)刂凡幌嗤瑫r,刪除原來申請的空間,重新開始構造;
int length=sizeof(other.m_data);
m_data=new [length+1];
strcpy(m_data,other.m_data);
return *this;
}
String::ShowString()//由于m_data是私有成員,對象只能通過public成員函數(shù)來訪問;
{
cout<<this->m_data<<endl;
}
main()
{
String AD;
char * p="ABCDE";
String B(p);
AD.ShowString();
AD=B;
AD.ShowString();
}