C++上机练习 Test1

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;
}

猜你喜欢

转载自blog.csdn.net/qq_41932111/article/details/89954029