仿照string类,实现myString类:
在这里插入代码片
#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){
size = other.size;
str = new char[size+1];
strcpy(str, other.str);
}
//析构函数
~myString(){
delete [] str;
}
//拷贝赋值函数
myString &operator=(const myString & other){
if(this != &other){
size = other.size;
str = new char[size+1];
strcpy(str, other.str);
}
return *this;
}
//判空函数
bool empty(){
if(0 == size){
return 0;
}else{
return 1;
}
}
//size函数
int getsize(){
return size;
}
//c_str函数,返回一个指向字符串的指针
const char* c_str(){
return str;
}
//at函数
char &at(int pos){
return str[pos];
}
//加号运算符重载
const myString operator+(const myString &R) const{
myString temp;
temp.size = this->size + R.size;
strcpy(temp.str,this->str);
strcat(temp.str, R.str);
return temp;
}
//加等于运算符重载
myString &operator+=(const myString &R){
this->size += R.size;
strcat(this->str, R.str);
return *this;
}
//关系运算符重载(>)
bool operator>(const myString &R)const{
return this->size>R.size;
}
void show(){
cout << this->str << endl;
}
};
int main()
{
myString s1("muwanluo");
//调用判空函数
if(s1.empty()){
cout << "不为空!" << endl;
}else{
cout << "为空!" << endl;
}
s1.show();
//调用获取大小函数
cout << "s1.size = " << s1.getsize() << endl;
//调用at函数
cout << "s1.size = " << s1.at(1) << endl;
myString s2("yjc");
myString s3;
//调用加号运算符重载
s3 = s1+s2;
s3.show();
//调用加等于运算符重载
s3 += s1;
s3.show();
//调用>运算符重载
if(s3 > s1){
cout << "s3大" << endl;
}else{
cout << "s1大" << endl;
}
return 0;
}
思维导图: