一、仿照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];
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:有道云笔记