仿写string类 - Mystring类
(1).提供string提供的多个构造函数。
(2).实现拷贝构造函数。
(3).实现 = 符号重载。
(4).实现析构函数。
(5).实现 + 运算符重载。Mystring + Mystring, Mystring + "字符串", "字符串" + Mystring。
(6).实现类型转换函数, 把Mystring转换为"字符串"
完整代码:
#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <iostream>
#include <string>
using namespace std;
class Mystring
{
public:
Mystring()//创建一个空的字符串
{
str = new char[1] {'\0'};
}
Mystring(const char* s);//根据s创建一个字符串
~Mystring();//析构函数
Mystring(const Mystring& s);//拷贝构造函数
void operator =(const Mystring& s);//= 重载
Mystring operator+(const Mystring& s)const;//实现 + 运算符重载,Mystring + Mystring
Mystring operator+(char* s)const; //Mystring + "字符串"
friend Mystring operator+(const char* s, const Mystring& c); // "字符串" + Mystring
friend ostream& operator<<(ostream& os, Mystring& t);
operator char* ()const//类型转换
{
return str;
}
private:
char* str;
};
Mystring::Mystring(const char* s)
{
str = new char[strlen(s) + 1];
strcpy(str, s);
}
Mystring::~Mystring()
{
delete[]str;
}
Mystring::Mystring(const Mystring& s)
{
str = new char[strlen(s.str) + 1];
strcpy(str, s.str);
}
void Mystring::operator =(const Mystring& s)
{
if (&s == this) //判断s是否是自己,防止 s5=s5情况
return;
delete[]str;//释放原有的内存
str = new char[strlen(s.str) + 1];
strcpy(str, s.str);
}
Mystring Mystring::operator+(const Mystring& s)const//实现 + 运算符重载,Mystring + Mystring
{
char* string = new char[strlen(str) + strlen(s.str) + 1];
strcpy(string, str);
strcat(string, s.str);
Mystring t(string);
delete[]string;
return t;
}
Mystring Mystring::operator+(char* s) const //Mystring + "字符串"
{
char* string = new char[strlen(str) + strlen(s) + 1];
strcpy(string, str);
strcat(string, s);
Mystring t(string);
delete[]string;
return t;
}
Mystring operator+(const char* s, const Mystring& c) // "字符串" + Mystring
{
char* string = new char[strlen(s) + strlen(c.str) + 1];
strcpy(string, s);
strcat(string, c.str);
Mystring t(string);
//delete[]string;
return t;
}
ostream& operator<<(ostream& os, Mystring& s)
{
os << s.str << endl;
return os;
}
int main()
{
Mystring s1("abcd");
Mystring s2("efgh");
cout << "s1=" << s1;
cout << "s2=" << s2;
cout << "---------" << endl;
Mystring s3 = s1 + s2;
cout << "s3=s1+s2=" << s3;
Mystring s4 = s1 + "ijkl";
cout << "s4=s1+ijkl=" << s4;
Mystring s5 = "ijkl" + s3;
cout << "s5=ijkl+s3=" << s5;
cout << "---------" << endl;
char* n1 =s1;
cout << "n1=" << n1;
return 0;
}
程序运行结果: