my_string.h
#ifndef MY_STRING_H
#define MY_STRING_H#include <iostream>
#include <cstring>using namespace std;class My_string
{
private:char *ptr; int size; int len; public:My_string():size(20){cout<<"****************无参构造***********"<<endl;this->ptr = new char[size];this->ptr[0] = '\0'; this->len = 0;}My_string(const char* src){cout<<"****************一个参数有参构造***********"<<endl;this->len = strlen(src);this->size = len + 1;this->ptr = new char[size];strcpy(this->ptr,src);}My_string(int num,char value){cout<<"****************两个参数有参构造***********"<<endl;this->len = num;this->size = len + 1;this->ptr = new char[len+1];int i=0;while(i<num){this->ptr[i]=value;i++;}this->ptr[num]='\0';}My_string (const My_string &other){cout<<"****************拷贝构造***********"<<endl;len = other.len;size = other.size;ptr = new char[size];strcpy(ptr, other.ptr);}My_string &operator=(const My_string &other){cout<<"****************拷贝赋值***********"<<endl;if (this == &other) {return *this; }delete[] ptr;this->len = other.len;this->size = other.size;this->ptr = new char[size];strcpy(ptr, other.ptr);return *this;}~My_string(){cout<<"****************析构函数***********"<<endl;delete []this->ptr;}void show();void isempty();void isfull();void push_back(char value);void pop_back();char &at(int index);void clear();char* data();int get_length();int get_size();void resize();};#endif
my_string.cpp
#include "my_string.h"
#include <cstring>
void My_string::show(){cout<<ptr<<endl;
}
void My_string::isempty(){if(this->len==0){cout<<"字符串为空"<<endl;}return;
}
void My_string::isfull(){if(this->len>=this->size){cout<<"字符串满"<<endl;resize();cout<<"重新分配空间"<<endl;}else{cout<<"字符串未满"<<endl;}return;
}
void My_string::push_back(char value){this->isfull();this->ptr[len]=value;len++;ptr[len]='\0';
}
void My_string::pop_back(){this->len=this->len-1;ptr[len]='\0';
}
char & My_string::at(int index){return ptr[index];
}
void My_string::clear(){ptr[0]='\0';this->len=0;
}
char* My_string::data(){return this->ptr;
}
int My_string::get_length(){return this->len;
}
int My_string::get_size(){return this->size;
}
void My_string::resize() {size *= 2;char* new_ptr = new char[size];strcpy(new_ptr, ptr);delete[] ptr;ptr = new_ptr;}
main.cpp
#include "my_string.h"int main(){My_string p1;My_string p2("hello");p2.show();My_string p3(5,'A');p3.show();My_string p4 = p2;p4.show();p3=p2;p3.show();p2.show();cout<<"p2的第3个字符"<<p2.at(3)<<endl;cout<<"p2C风格的字符串"<<p2.data()<<endl;p2.isfull();cout<<"p2的最大长度:"<<p2.get_size()<<endl;cout<<"p2现在的长度:"<<p2.get_length()<<endl;p2.clear();p2.show();p2.push_back('W');p2.show();p2.pop_back();p2.show();}