要求:
//无参构造默认长度为15
//有参构造
//析构函数
//拷贝构造函数
//拷贝赋值函数
//c_str函数
//size函数
//empty函数
//at函数
总代码如下:
#include <iostream>
#include <cstring>
using namespace std;
class My_string
{
private:
char *data;
int len;
public:
//无参构造默认长度为15
My_string():len(15)
{
data = new char[len];
data[0] = '\0';
}
//有参构造
My_string(const char *str)
{
len = strlen(str);
data = new char[len+1];
strcpy(data,str);
}
My_string(int n, char ch)
{
len = n;
data = new char[n+1];
for(int i = 0; i < n; i++)
data[i] = ch;
}
//析构函数
~My_string()
{
delete []data;
cout<<"析构函数"<<" this = "<<this<<endl;
}
//拷贝构造函数
My_string(const My_string &str ):data(str.data)
{
data = new char[str.len+1];
strcpy(data,str.data);
}
//拷贝赋值函数
My_string & operator=(const My_string &str)
{
if(this!=&str){
data=new char[str.len+1];
strcpy(data,str.data);
len=str.len;
}
return *this;
}
//c_str函数
char *c_str()
{
return data;
}
//len函数
int size()
{
return len;
}
//empty函数
bool empty() //判断是否为空
{
if(len==0)
{
return 0;
}
else
{
return 1;
}
}
//at函数
char at(int n)
{
return *(data+n);
}
void show()
{
cout<<data<<endl;
}
};
int main()
{
My_string s("hello world");
s.show();
My_string s2(5,'b');
s2.show();
My_string s3 = s2;
s3.show();
My_string s4;
s4 = s;
s4.show();
cout<<"s4长度为"<<s4.size()<<endl;
if(s4.empty())
{
cout<<"s4不空"<<endl;
}
else
{
cout<<"s4空"<<endl;
}
cout<<"s4[1] = "<<s4.at(1)<<endl;
return 0;
}
结果如图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/97694a1761143e4fcd866fcdb54e539e.png)