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;
}
相关推荐
Ni-Guvara3 分钟前
函数对象笔记
c++·算法
似霰7 分钟前
安卓智能指针sp、wp、RefBase浅析
android·c++·binder
芊寻(嵌入式)17 分钟前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
獨枭19 分钟前
C++ 项目中使用 .dll 和 .def 文件的操作指南
c++
霁月风22 分钟前
设计模式——观察者模式
c++·观察者模式·设计模式
橘色的喵22 分钟前
C++编程:避免因编译优化引发的多线程死锁问题
c++·多线程·memory·死锁·内存屏障·内存栅栏·memory barrier
何曾参静谧1 小时前
「C/C++」C/C++ 之 变量作用域详解
c语言·开发语言·c++
AI街潜水的八角1 小时前
基于C++的决策树C4.5机器学习算法(不调包)
c++·算法·决策树·机器学习
JSU_曾是此间年少2 小时前
数据结构——线性表与链表
数据结构·c++·算法
此生只爱蛋3 小时前
【手撕排序2】快速排序
c语言·c++·算法·排序算法