字符串的构造函数和析构函数以及赋值函数的重载,是面试中经常考到的问题,意在考察应聘者对于重载以及构造函数、析构函数的理解。
程序如下:
#include<iostream>
#include<string.h>
using namespace std;
class String
{
public:
String(const char*str = NULL);
String(const String &other);
String& operator=(const String &other );
void print()const
{
printf("%s",m_Data);
cout<<"\n";
}
~String();
private:
char *m_Data;
};
String::~String()
{
delete [] m_Data;
}
String::String(const char*str)
{
if(NULL == str)
{
m_Data = new char[1];
*m_Data = '\0';
}
else
{
int length = strlen(str);
m_Data = new char[length + 1];
strcpy(m_Data,str);
}
}
String::String(const String &other)
{
int length = strlen(other.m_Data);
m_Data = new char[length + 1];
strcpy(m_Data,other.m_Data);
}
String &String::operator =(const String &other)
{
if(this == &other)
return *this;
delete [] m_Data;
int length = strlen(other.m_Data);
m_Data = new char[length + 1];
strcpy(m_Data,other.m_Data);
return *this;
}
int main()
{
String str1("china");
String str2(str1);
str2.print();
cout<<"\n";
String str3 = str2;
str3.print();
return 0;
}
程序的执行 结果是: