题目:
class MyString
{
public:
MyString(const char *str);//构造函数
MyString(const MyString& strClass);//拷贝构造函数
MyString& operator=(const MyString& strClass);//赋值函数
~MyString(void);//析构函数
private:
char *m_data;
};
完成类中的函数。
红色部分易出错:
MyString::MyString(const char* str)//构造函数
{
if (NULL == str)
{
m_data = new char[1];// 这样下面的strlen()才不会报错
*m_data = '\0';
}
else
{
int len = strlen(str);
m_data = new char[len + 1];
strcpy(m_data, str);
}
}
MyString::MyString(const MyString& strClass)//拷贝构造函数
{
int len = strlen(strClass.m_data);
m_data = new char[len + 1];
strcpy(m_data, strClass.m_data);//类中函数中的相同类其他对象可以访问其私有成员strClass.m_data
}
MyString& MyString::operator=(const MyString& strClass)//赋值函数
{
if (this != &strClass)//是自赋值就直接返回 *this
{
delete[] m_data;//释放原来就有的内存
int len = strlen(strClass.m_data);
m_data = new char[len + 1];
strcpy(m_data, strClass.m_data);
}
return *this;
}
MyString::~MyString(void)//析构函数
{
delete[] m_data;
}
int main()
{
char *p="123";
MyString str1(p);//调用构造函数
MyString str2 = str1;//调用拷贝构造函数
MyString str3=NULL;//如果等号右边不是对象就调用构造函数,是对象就调用拷贝构造函数
str3 = str1;//调用赋值构造函数
system("pause");
return 0;
}