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;
}
相关推荐
所以遗憾是什么呢?7 小时前
【题解】Educational Codeforces Round 195 (Rated for Div. 2) ABCDE
c++·动态规划·acm·icpc·ccpc·xcpc·codeforecs
Lhan.zzZ8 小时前
Qt WebEngineView 在 Linux 上无法加载网页:从“看不见 HTML“到“禁用沙箱“
linux·c++·qt
sysu_chenxy10 小时前
二重循环输出二维图形
c++
划破黑暗的第一缕曙光11 小时前
[C++]:2.类和对象(下)
c++·类和对象·对象·类
黎相思13 小时前
LRU Cache
c++·缓存
UIU11413 小时前
P1003 [NOIP 2011 提高组] 铺地毯
数据结构·c++·算法
xxwl58514 小时前
区域赛算法模版第四章---数据结构
数据结构·c++·算法
余额瞒着我当琳16 小时前
哈希表底层原理解析,直接定址法,哈希冲突,负载因子,哈希函数,开放定址法
java·c++·哈希算法·散列表
xxwl58516 小时前
区域赛算法模版第五章---数学与数论
c++·笔记·算法
Quz17 小时前
QML TabBar 标签栏交互效果合集
qt·动画·qml