C++(day4)

思维导图

封装Mystring

cpp 复制代码
#include <iostream>
#include<cstring>

using namespace std;

class Mystring{
public:
    //无参构造函数
    Mystring():size(10){
        str=new char[size];
        strcpy(str,"");
        cout<<"无参构造函数"<<endl;
    }
    //有参构造函数
    Mystring(const char *s){
        size=strlen(s);
        str=new char[size+1];
        strcpy(str,s);
        cout<<"有参构造函数"<<endl;
    }
    //拷贝构造函数
    Mystring(const Mystring &other){
        this->size=other.size;
        this->str=new char[this->size];
        strcpy(this->str,other.str);
        cout<<"拷贝构造函数"<<endl;
    }
    //析构函数
    ~Mystring(){
        delete []str;
        cout<<"析构函数"<<endl;
    }
    //拷贝赋值函数
    Mystring &operator=(const Mystring &other){
        if(this!=&other){
            this->size=other.size;
            strcpy(this->str,other.str);
        }
        cout<<"拷贝赋值函数"<<endl;
        return *this;
    }
    //判空函数
    bool empty()const{
        return !strlen(this->str);
    }
    //size函数
    int strsize()const{
        return strlen(this->str);
    }
    //c_str函数
    char *c_str(){
        return this->str;
    }
    //at函数
    char &at(int pos){
        return *(this->str+pos-1);
    }
    //加号运算符重载
    Mystring operator+(const Mystring &R)const{
        Mystring temp;
        strcat(temp.str,this->str);
        strcat(temp.str,R.str);
        return temp;
    }
    //加等于运算符重载
    Mystring &operator+=(const Mystring &R){
        strcat(this->str,R.str);
        return *this;
    }
    //关系运算符重载(>)
    bool operator>(const Mystring &R)const{
        if(strcmp(this->str,R.str)>0){
            return true;
        }
        else{
            return false;
        }
    }
    //中括号运算符重载
    char &operator[](int pos)const{
        return *(this->str+pos-1);
    }
    //展示函数
    void show(){
        cout<<str<<endl;
    }
private:
    char *str;  //字符串首地址
    int size;   //字符串大小
};

int main()
{
    Mystring str1("hello");
    str1.show();
    Mystring str2("world");
    str2.show();
    Mystring str3;
    if(str3.empty()){
        cout<<"str3现在为空,字符串长度为"<<str3.strsize()<<endl;
    }
    str3=str1;
    str3.show();
    if(!str3.empty()){
        cout<<"str3现在不为空,字符串长度为"<<str3.strsize()<<endl;

    }
    Mystring str4=str2;
    str4.show();
    str4+=str3;
    str4.show();
    cout<<"str4字符串第7位是"<<str4.at(7)<<",str4字符串第13位是"<<str4[13]<<endl;
    cout<<str4.c_str()<<endl;
    if(str3>str2){
        cout<<"str3>str2"<<endl;
    }
    else{
        cout<<"str3<str2"<<endl;
    }

    return 0;
}
相关推荐
郝学胜-神的一滴1 分钟前
深入理解QFlags:Qt中的位标志管理工具
开发语言·c++·qt·程序人生
柯南二号1 小时前
【Java后端】MyBatis-Plus 原理解析
java·开发语言·mybatis
INS_KF1 小时前
【C++知识杂记2】free和delete区别
c++·笔记·学习
一只鱼^_1 小时前
牛客周赛 Round 105
数据结构·c++·算法·均值算法·逻辑回归·动态规划·启发式算法
ikkkkkkkl1 小时前
C++设计模式:面向对象设计原则
c++·设计模式·面向对象
我是哈哈hh1 小时前
【Node.js】ECMAScript标准 以及 npm安装
开发语言·前端·javascript·node.js
啊阿狸不会拉杆2 小时前
《算法导论》第 27 章 - 多线程算法
java·jvm·c++·算法·图论
重启的码农2 小时前
ggml介绍 (8) 图分配器 (ggml_gallocr)
c++·人工智能·神经网络
重启的码农2 小时前
ggml介绍 (9) 后端调度器 (ggml_backend_sched)
c++·人工智能·神经网络
Sammyyyyy3 小时前
2025年,Javascript后端应该用 Bun、Node.js 还是 Deno?
开发语言·javascript·node.js