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;
}
相关推荐
闻缺陷则喜何志丹18 分钟前
【强连通分量 拓扑序】P9431 [NAPC-#1] Stage3 - Jump Refreshers|普及+
c++·算法·图论·拓扑序·洛谷·强连通分量
大白爱琴24 分钟前
C++ 精简知识点
开发语言·c++
菜一头包37 分钟前
QT5中的QGraphics图形视图框架学习笔记(Item、Scene和View)
笔记·qt·学习
忘梓.1 小时前
AVL树的平衡艺术:用C++写出会“站立”的二叉树(未完待续)
开发语言·c++·oracle
程序猿小D2 小时前
第30节 Node.js C/C++ 插件
c语言·c++·后端·node.js·vim
liulilittle2 小时前
通过高级处理器硬件指令集AES-NI实现AES-256-CFB算法。
linux·服务器·c++·算法·安全·加密·openssl
机器视觉知识推荐、就业指导10 小时前
C++/Qt 联合编程中的定时器使用陷阱:QObject::startTimer 报错详解
c++·qt
慢半拍iii10 小时前
数据结构——D/串
c语言·开发语言·数据结构·c++
邪恶的贝利亚11 小时前
从基础到实战-rmpt to webrtc
c++·webrtc·rtmp·流媒体
whoarethenext11 小时前
使用 C/C++ 和 OpenCV 提取图像的感兴趣区域 (ROI)
c语言·c++·opencv