2023/9/11 qt&c++

cpp 复制代码
#include <iostream>
#include <cstring>
using namespace std;
class myString
{
private:
    char *str;
    int size;
public:
    //无参构造
    myString():size(10)
    {
        str = new char[size];   //构造出一个长度为10的字符串
        strcpy(str,"");         //赋值为空串
    }
    //有参构造
    myString(const char *s)
    {
        size = strlen(s);
        str = new char[size+1];
        strcpy(str,s);
    }

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

    //析构函数
    ~myString()
    {
        delete[] this->str;
        cout<<"析构函数"<<endl;
    }
    //拷贝赋值函数
    myString &operator = (const myString &other)
    {
       size = other.size;
       strcpy(str,other.str);
       cout<<"拷贝赋值函数"<<endl;
       return *this;

     }

    //判空函数
    bool str_empty(const char *str) const
    {
        if(str ==NULL||*str=='\0')
        {

           return true;
        }
        else
            return false;
    }
    //size函数
    int str_size(const char *str)const
    {
        return sizeof(str);
    }
    //c_str函数
    const char *c_str() const
    {
        return str;
    }
    //at函数
    char  &at(int pos)
    {


        return str[pos];

    }
    //成员函数版实现加号运算符重载
    myString operator+(const myString &R)const
    {
        myString new_string = *this;
        delete[] new_string.str;
        int len =strlen(this->str)+strlen(R.str)+1;
        new_string.str = new char[len];
        strcpy(new_string.str,this->str);
        strcat(new_string.str,R.str);
        return new_string;
    }
    //成员函数版实现加等于运算符重载
    myString &operator+=(const myString &R)
    {
       int len = strlen(str)+strlen(R.str)+1;
       char *s =this->str;
       str = nullptr;
       delete [] str;
       str = new char [len];
       strcpy(this->str,s);
       strcat(this->str,R.str);
       return *this;
    }

    //关系运算符重载
    bool operator>(const myString &R)const
    {
        //先求出长度
        int len1 = strlen(this->str);
        int len2 = strlen(R.str);
        int minlen =(len1<len2?len1:len2);
        for(int i=0;i<minlen;i++)
        {
            if(this->str[i]>R.str[i])
            {
                return true;
            }
            else if(this->str[i]<R.str[i])
            {
                return false;
            }
        }
        return  len1>len2;
    }

    //成员函数版实现中括号运算符重载
    char & operator[](int index)
    {
        if(index>=0&&index<size)
        {
            return str[index];
        }
    }
    //展示函数
    void show()
    {
        cout<<"str = "<<str<<"  size = "<<size<<endl;
    }
};
int main()
{
    myString s1("hello");
    s1[0]='H';
    s1.show();
    myString s2("world");
    s2.show();
    myString s6 =s1;
    s6.show();
    myString s3;
    s3 = s1 + s2;
    cout<<s3.c_str()<<endl;
    myString s4("hahaha");
    s4+=s1;
    cout<<s4.c_str()<<endl;
    if(s3>s2)
    {
        cout<<"yes"<<endl;
    }
    else
        cout<<"no"<<endl;
    myString s5("daydayup");
    s5.show();
    return 0;
}
相关推荐
不会代码的小猴9 分钟前
C++新增关键字
开发语言·c++·笔记
liulilittle1 小时前
并发与内存安全术语:定义、分类与关联
c++·安全·并发·术语
_wyt0011 小时前
从图到树:9道洛谷基础题带你入门树形结构
c++·
Titan20242 小时前
Linux网络基础知识
linux·服务器·网络·c++·学习
丰锋ff3 小时前
1.7在Qt窗口中添加右键菜单
开发语言·qt
Titan20244 小时前
Linux网络学习:套接字、UDP的封装与应用
linux·服务器·开发语言·网络·c++
Felven4 小时前
C2. Potions (Hard Version)
c++
Tyler_TXZ5 小时前
C++C语言之——树
c语言·c++·算法·
hansang_IR5 小时前
【记录】「COCI 2024/2025」四道模拟赛/8.13
c++·算法
旖旎夜光5 小时前
LeetCode 30:串联所有单词的子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口