仿照string完成myString类
#include <iostream>
#include <cstring>
using namespace std;
//定义类
class myString{
private:
//用来存储传进来的字符串
char *str;
//记录长度
int size;
public:
//无参构造用于给对象申请空间
myString():size(10)
{
str = new char[size];
cout << "无参构造" << endl;
}
//有参构造
myString(const char *s)
{
size = strlen(s);
str = new char[size + 1];
strcpy(str, s);
cout << "有参构造" << endl;
}
//拷贝构造
myString(const myString & other)
{
size = other.size;
str = new char[size + 1];
strcpy(str, other.str);
cout << "拷贝构造" << endl;
}
//拷贝赋值
myString &operator= (const myString &other)
{
if(this == &other)
{
return *this;
}
delete []str;
size = other.size;
str = new char[size+1];
strcpy(str, other.str);
return *this;
cout << "拷贝赋值" << endl;
}
//析构函数
~myString()
{
delete []str;
cout << "析构函数" << endl;
}
//判空函数
bool empty()
{
if(strlen(str) == 0)
{
return true;
}
else
{
return false;
}
}
//size函数
int length()
{
return size;
}
//c_str函数
const char * c_str()
{
return str;
}
//at函数
char &at(int pos)
{
if(pos >= size || pos < 0)
{
cout << "段错误" << endl;
}
return str[pos];
}
};
int main()
{
//有参构造函数
myString s1("word");
cout << "s1 = " << s1.c_str() << endl;
//拷贝构造函数
myString s2(s1);
cout << "s2 = " << s2.c_str() << endl;
myString s3;
//拷贝赋值函数
if(!s3.empty())
{
//对等号进行更改了
s3 = s2;
}
cout << "s3.length() = " << s3.length() << endl;
cout << "s3.c_str() = " << s3.c_str() << endl;
cout << "s3.at(3) = " << s3.at(3) << endl;
return 0;
}
输出结果
有参构造
s1 = word
拷贝构造
s2 = word
无参构造
s3.length() = 4
s3.c_str() = word
s3.at(3) = d
析构函数
析构函数
析构函数