TEST 1:
1.已知字符串类MyString的定义为:
class MyString
{
public:
MyString(const char* pData= NULL); // 普通构造函数
MyString(const MyString &); // 拷贝构造函数
~ MyString(); // 析构函数
MyString & operator =(const MyString &); // 赋值函数
MyString& operator += (const MyString &);
operator char* () const; // 自动转换函数
private:
char *mpData; // 用于保存字符串
};
全局函数:
const MyString operator + (const MyString &,const MyString &);//字符串连接
ostream& operator<<(ostream& os, const MyString& str); //定向输出
请完整实现MyString类和指定的全局函数。(可以使用new,delete运算以及strcpy,strlen,…等库函数,还可以定义其他辅助函数)。
answer:
cpp文件:
#include"mystring.h"
#include<string>
const Mystring operator+(const Mystring & lhs, const Mystring & rhs) //字符串连接
{
return Mystring(lhs) += rhs;
}
ostream& operator<<(ostream& os, const Mystring& str) //定向输出
{
os << (char*)str;
return os;
}
Mystring::Mystring(const char* pData)
{
if (pData == nullptr)
{
mpData = new char[1];
strcpy(mpData, "");
}
else
{
mpData = new char[strlen(pData) + 1];
strcpy(mpData, pData);
}
}
Mystring::Mystring(const Mystring &t)
{
mpData = new char[strlen(t.mpData) + 1];
strcpy(mpData, t.mpData);
}
Mystring& Mystring::operator=(const Mystring & t)
{
if (this != &t) {
delete[] mpData;
mpData = new char[strlen(t.mpData) + 1];
strcpy(mpData, t.mpData);
}
return *this;
}
Mystring::~Mystring()
{
delete[]mpData;
}
Mystring & Mystring::operator += (const Mystring & t)
{
char* pnew = new char[strlen(mpData) + strlen(t.mpData) + 1];
strcpy(pnew, mpData);
strcat(pnew, t.mpData);
delete[] mpData;
mpData = pnew;
return *this;
}
Mystring:: operator char* () const
{
return mpData;
}