思维导图
代码
#include <iostream>
#include<string.h>using namespace std;class myString
{
private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度
public://无参构造myString():size(10){str = new char[size]; //构造出一个长度为10的字符串strcpy(str,""); //赋值为空串}//有参构造myString(const char *s) //string s("hello world"){size = strlen(s);str = new char[size+1];strcpy(str, s);}//拷贝构造myString(const myString &other):str(other.str), size(other.size){str = new char[size+1];strcpy(str, other.str);size = other.size;cout<<"拷贝构造"<<endl;}//析构函数~myString(){delete str;cout<<"~"<<endl;}//拷贝赋值函数myString& operator=(const myString& other){if(this != &other) //确定不是自己给自己赋值{this->size = other.size;//判断原来指针空间释放被清空if(this->str != NULL){delete this->str;}this->str = new char(*other.str);}cout<<"Stu:: 拷贝赋值函数"<<endl;return *this; //返回自身引用}//判空函数bool isEmpty(){return size==0;}//size函数int Size(){return strlen(str);}//c_str函数char* c_str(){return str;}//at函数char &at(int pos){if(pos > size-1){cout<<"下标超出范围";}else{return str[pos];}}//加号运算符重载const myString operator+(const myString& other)const{myString temp;temp.size = this->size + other.size;strcpy(temp.str, this->str);strcat(temp.str, other.str);return temp;}//加等于运算符重载myString& operator+=(const myString& other){strcat(this->str, other.str);this->size += other.size;return *this;}//关系运算符重载(>)bool operator>(const myString& other)const{int j = strlen(str);for(int i=0; i<j; i++){if(str[i]>other.str[i]){return true;}else{return false;}}}//中括号运算符重载char & operator[] (int pos){if(pos > size-1){cout<<"下标超出范围";}else{return str[pos];}}
};
int main()
{myString s1("hello");myString s2(" world");cout<<s1.c_str()<<endl;cout<<s1.at(4)<<endl;cout<<s1.Size()<<endl;myString s3 = s1;cout<<s3.c_str()<<endl;s3+=s2;cout<<s3.c_str()<<endl;cout<<s3[10]<<endl;myString s4;s4 = s3;if(s1>s2){cout<<"yes"<<endl;}else{cout<<"no"<<endl;}return 0;
}
运行截图