要注意字符串是否为空
代码实现:
#include <iostream>
using namespace std;
#include <string.h>
class CString
{
public:
CString(char* p = "")//构造函数
{
mstr = new char[strlen(p) + 1]();
strcpy(mstr, p);
}
CString(const CString& rhs)//拷贝构造函数
{
mstr = new char[strlen(rhs.mstr) + 1]();
strcpy(mstr, rhs.mstr);
}
~CString()//析构函数
{
delete mstr;
mstr = NULL;
}
CString& operator=(const CString& rhs)//赋值运算符的重载函数
{
if (this != &rhs)
{
delete mstr;
mstr = new char[strlen(rhs.mstr) + 1];
strcpy(mstr, rhs.mstr);
}
return *this;
}
bool operator !=(const CString& rhs)//重载!=
{
return strcmp(mstr, rhs.mstr) != 0;
}
bool operator ==(const CString& rhs)//重载==
{
return !(*this != rhs);
}
private:
char* mstr;
friend istream& operator >>(istream&, CString&);//重载输入流运算符
friend const CString operator+(const CString&, const CString&);//重载+
friend ostream& operator<<(ostream&, const CString&);//重载输出流运算符
};
//类外实现重载输入流运算符
istream& operator >>(istream& in, CString& rhs)
{
char *p = new char[100]();
in >> p;
int i = 0;
if (p[99] == '0')
{
i = strlen(p);
}
else
{
i = 100;
}
delete rhs.mstr;
rhs.mstr = new char[i + 1]();
strcpy(rhs.mstr, p);
return in;
}
//类外实现重载+
const CString operator+(const CString& lhs, const CString& rhs)
{
char* tmp = new char[strlen(lhs.mstr) + strlen(rhs.mstr) + 1]();
strcat(tmp, lhs.mstr);
strcat(tmp, rhs.mstr);
return CString(tmp);
}
//类外实现重载输出流运算符
ostream& operator<<(ostream& out, const CString& rhs)
{
out << rhs.mstr << " ";
return out;
}
int main()
{
CString str1;
CString str2("hello");
CString str3(str2);
cout << "str1:";
cin >> str1;
str3 = "hello";
str3 = str3 + "world";
cout << "str2:" << str2 << endl;
cout <<"str3:" << str3 << endl;
return 0;
}
string类是C++中很重要的类 一定要掌握 面试的时候会问到
运行结果: