一、仿照string类,完成myString 类
mystring.h
#ifndef MYSTRING_H
#define MYSTRING_H#include <iostream>
#include <cstring>using namespace std;class myString
{
private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度
public://无参构造myString():size(10){str = new char[size]; //构造出一个长度为10的字符串strcpy(str,""); //赋值为空串cout<<"无参构造"<<endl;}//有参构造myString(const char *s) //string s("hello world"){size = strlen(s);str = new char[size+1];strcpy(str, s);cout<<"有参构造"<<endl;}//拷贝构造myString(const myString &other){str=new char[other.size];strcpy(str,other.str);this->size=other.size;cout<<"拷贝构造"<<endl;}//析构函数~myString(){delete []str;cout<<"析构函数"<<endl;}//拷贝赋值函数myString &operator=(const myString &other);//判空函数bool string_empty()const;//size函数int string_size()const;//c_str函数const char* c_str()const;//at函数char &at(int pos);//加号运算符重载myString operator+(const myString &other)const;//加等于运算符重载myString operator+=(const myString &other);//关系运算符重载(>)bool operator>(const myString &other)const;//中括号运算符重载char operator[](int index)const;
};#endif // MYSTRING_H
mystring.cpp:
#include "mystring.h"//拷贝赋值函数
myString &myString::operator=(const myString &other)
{if(this!=&other){if(str!=NULL){delete []str;}str=new char[other.size];strcpy(str,other.str);this->size=other.size;}return *this;
}
//判空函数
bool myString::string_empty()const
{return strcmp(str,"")==0;
}
//size函数
int myString::string_size()const
{return size;
}
//c_str函数
const char* myString::c_str()const
{return str;
}
//at函数
char &myString::at(int pos)
{while(1){if(pos<0||pos>=size){cout<<"输入格式不对,范围为0~"<<size<<endl;}else{break;}}return *(str+pos);
}
//加号运算符重载
myString myString::operator+(const myString &other)const
{myString a=*this;char buf[a.size];strcpy(buf,a.str);if(a.str!=NULL){delete []a.str;}a.size=a.size+other.size;a.str=new char[a.size+1];strcpy(a.str,buf);strcat(a.str,other.str);return a;
}
//加等于运算符重载
myString myString::operator+=(const myString &other)
{char buf[size];strcpy(buf,str);if(str!=NULL){delete []str;}size=size+other.size;str=new char[size];strcpy(str,buf);strcat(str,other.str);return *this;
}
//关系运算符重载(>)
bool myString::operator>(const myString &other)const
{return strcmp(str,other.str)>0;
}
//中括号运算符重载
char myString::operator[](int index)const
{while(1){if(index<0||index>=size){cout<<"输入格式不对,范围为0~"<<size<<endl;}else{break;}}return *(str+index);
}
main.cpp:
#include "mystring.h"int main()
{myString a("hello world");cout<<"字符串a为 "<<a.c_str()<<endl;cout<<"字符串大小为"<<a.string_size()<<endl;a.at(0)='H';cout<<"字符串a为 "<<a.c_str()<<endl;myString b;cout<<"字符串b为空?"<<b.string_empty()<<endl;b=a;cout<<"字符串b为 "<<b.c_str()<<endl;myString c=a+b;cout<<"字符串c为 "<<c.c_str()<<endl;myString d("hahaha");d+=a;cout<<"字符串d为 "<<d.c_str()<<endl;cout<<"字符串d比a大? "<<d.operator>(a)<<endl;return 0;
}
运行结果:
二、思维导图:day3补充: 有道云笔记 day4:有道云笔记