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;
}
相关推荐
charlie1145141912 小时前
精读C++20设计模式:行为型设计模式:中介者模式
c++·学习·设计模式·c++20·中介者模式
楼田莉子2 小时前
Qt开发学习——QtCreator深度介绍/程序运行/开发规范/对象树
开发语言·前端·c++·qt·学习
oioihoii2 小时前
超越 std::unique_ptr:探讨自定义删除器的真正力量
c++
Gohldg3 小时前
C++算法·贪心例题讲解
c++·数学·算法·贪心算法
韩立学长3 小时前
【开题答辩实录分享】以《基于python的奶茶店分布数据分析与可视化》为例进行答辩实录分享
开发语言·python·数据分析
天若有情6733 小时前
C++空值初始化利器:empty.h使用指南
开发语言·c++
远远远远子3 小时前
类与对象 --1
开发语言·c++·算法
无敌最俊朗@3 小时前
C/C++ 关键关键字面试指南 (const, static, volatile, explicit)
c语言·开发语言·c++·面试
2401_831501733 小时前
Python学习之day03学习(文件和异常)
开发语言·python·学习
酷~3 小时前
C语言模拟面向对象编程方法之多态
c语言·开发语言