1、作业要求
用C++语言仿照string类,封装一个My_string类,并且简单的实现相关功能。
2、实现过程
#include <iostream>
#include <cstring>
using namespace std;
class My_string
{
private:
char *data;
int size;
public:
//无参构造默认长度为15
My_string();
//有参构造
My_string(const char *str);
My_string(int n, char ch);
//析构函数
~My_string();
//拷贝构造函数
My_string(const My_string &other);
//拷贝赋值函数
My_string & operator=(const My_string &other);
//c_str函数
const char *c_str();
//size函数
int size_t();
//empty函数
bool empty();
//at函数
char at(int i);
void show();
};
//无参构造默认长度为15
My_string::My_string():size(15)
{
data = new char[size];
data[0] = '\0';
}
//有参构造
My_string::My_string(const char *str)
{
int s = strlen(str);
data = new char[s];
data[0] = '\0';
strcpy(data, str);
}
My_string::My_string(int n, char ch)
{
data = new char[n];
data[0] = '\0';
for(int i=0; i<n; i++) {
data[i] = ch;
}
}
//析构函数
My_string::~My_string()
{
delete []data;
cout<<"析构函数:this = "<<this<<endl;
}
//拷贝构造函数
My_string::My_string(const My_string &other)
{
int s = strlen(other.data);
data = new char[size];
data[0] = '\0';
data = other.data;
}
//拷贝赋值函数
My_string & My_string::operator=(const My_string &other)
{
int s = strlen(other.data);
data = new char[s];
data[0] = '\0';
data = other.data;
return *this;
}
//c_str函数
const char* My_string::c_str()
{
return data;
}
//size函数
int My_string::size_t()
{
return strlen(data);
}
//empty函数
bool My_string::empty()
{
return strlen(data)==0?1:0;
}
//at函数
char My_string::at(int i)
{
return data[i];
}
void My_string::show() {
cout<<data<<endl;
}
int main()
{
My_string s1; //无参构造
My_string s2 = "hello world!"; //有参构造
s2.show();
My_string s3(5,'A');
s3.show();
My_string s4 = s2; //拷贝构造
s4.show();
s1 = s2; //拷贝赋值
s1.show();
printf("%s\n", s3.c_str());
cout<<s3.c_str()<<endl;
cout<<"size_t = "<<s2.size_t()<<endl;
My_string ss1;
if(ss1.empty()) {
cout<<"空字符串!"<<endl;
}
else {
cout<<"非空字符串!"<<endl;
}
cout<<"s1[2] = "<<s1.at(2)<<endl;
return 0;
}
3、效果截图