day4_C++

day4_C++

思维导图

重载

#include <iostream>
#include <cstring>
using namespace std;


class MyString
{
private:
    char *str;
    int size;
public:
    MyString():size(10)
    {
        str = new char[size];
        strcpy(str,"");
    }

    MyString(const char *s)
    {
        size = strlen(s);
        str = new char (size+1);
        strcpy(str,s);
    }

    //拷贝构造函数
    MyString(const MyString & other):size(other.size)
    {
        this->str = new char [size];
        strcpy(this->str,other.str);
    }

    //析构函数
    ~MyString()
    {
        delete this->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 [size];
        strcpy(this->str,other.str);

        return *this;
    }

    //判空函数 无参数
    void is_empty()
    {
        int len = strlen(this->str);
        if(len == 0)
            cout<<"空,无内容"<<endl;
        else
            cout<<"非空,有内容"<<endl;
    }

    //size函数 无参数
    int ssize() const
    {
        return strlen(this->str);
    }

    //c_str函数
    char *c_str()
    {
        return this->str;
    }

    //at函数
    char my_at(int mark)
    {
        if(mark>size || mark<0)
        {
            cout<<"越界"<<endl;
            return NULL;
        }
        return this->str[mark];
    }

    //加号运算符重载
    const MyString operator+(const MyString & R) const
    {
        int len = this->ssize()+R.ssize()+1;
        MyString tempstr ;
        if(tempstr.str!=nullptr){
            delete tempstr.str;
            tempstr.size = 0;
        }
        if(NULL == R.str)
        {
            tempstr.str = new char [this->ssize()];
            strcpy(tempstr.str,this->str);
            tempstr.size = this->size;
            return tempstr ;
        }
        tempstr.str = new char [len];
        tempstr.size = len-1;
        strcpy(tempstr.str,this->str);
        strcat(tempstr.str,R.str);
        return tempstr;
    }

    //加等于运算符重载
    MyString operator+=(const MyString & R)
    {
        int len = this->ssize()+R.ssize()+1;
        if(len == 0)
            return *this;
        this->size = len-1;
        char * pstr = new char[len];
        strcpy(pstr,this->str);
        strcat(pstr,R.str);
        delete this->str;
        this->str = pstr;
        return *this;
    }

    //关系运算符重载
    bool operator>(const MyString & R) const
    {
        if(strcmp(this->str,R.str)>0)
            return true;
    }

    //中括号运算符重载
    char operator[](const int& mark) const
    {
        char s = this->str[mark];
        return s;
    }


    void out()
    {
        cout<<str<<endl;
    }
};


int main()
{
    MyString s1("lsm1314");
    s1.out();
    s1.is_empty();
    cout<<s1.ssize()<<endl;
    cout<<"c_str = "<<s1.c_str()<<endl;
    cout<<"at = "<<s1.my_at(4)<<endl;

    MyString s2 = s1;
    s2.out();

    MyString s3;
    s3=s1;
    s3.out();

    MyString s4;
    s4.is_empty();
    s4.out();

    MyString s5("hhh");
    MyString s6 = s1+s5;
    s6.out();

    MyString s7("eee");
    s6+=s7;
    s6.out();

    MyString s8("zzz");
    if(s8>s5)
    {
        cout<<"s8>s5"<<endl;
    }

    cout<<s1[6]<<endl;


    return 0;
}
相关推荐
远望清一色7 分钟前
基于MATLAB的实现垃圾分类Matlab源码
开发语言·matlab
confiself16 分钟前
大模型系列——LLAMA-O1 复刻代码解读
java·开发语言
凌云行者26 分钟前
OpenGL入门005——使用Shader类管理着色器
c++·cmake·opengl
XiaoLeisj28 分钟前
【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
java·开发语言·java-ee
凌云行者29 分钟前
OpenGL入门006——着色器在纹理混合中的应用
c++·cmake·opengl
杜杜的man31 分钟前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*32 分钟前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
半桶水专家33 分钟前
go语言中package详解
开发语言·golang·xcode
llllinuuu34 分钟前
Go语言结构体、方法与接口
开发语言·后端·golang
cookies_s_s34 分钟前
Golang--协程和管道
开发语言·后端·golang