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;
}
相关推荐
blasit1 天前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
肆忆_2 天前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
不想写代码的星星2 天前
虚函数表:C++ 多态背后的那个男人
c++
端平入洛4 天前
delete又未完全delete
c++
端平入洛5 天前
auto有时不auto
c++
郑州光合科技余经理6 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1236 天前
matlab画图工具
开发语言·matlab
dustcell.6 天前
haproxy七层代理
java·开发语言·前端
norlan_jame6 天前
C-PHY与D-PHY差异
c语言·开发语言
哇哈哈20216 天前
信号量和信号
linux·c++