day4_C++

news2024/12/26 22:04:59

day4_C++

  • 思维导图
  • 重载

思维导图

请添加图片描述

重载

#include <iostream>
#include <cstring>
using namespace std;


class MyString
{
private:
    char *str;
    int size;
public:
    MyString():size(10)
    {
        str = new char[size];
        strcpy(str,"");
    }

    MyString(const char *s)
    {
        size = strlen(s);
        str = new char (size+1);
        strcpy(str,s);
    }

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

    //析构函数
    ~MyString()
    {
        delete this->str;
        cout<<"析构完成"<<endl;
    }

    //拷贝赋值
    MyString& operator=(const MyString& other)
    {
        /*判断参数是否是自身*/
        if(this!=&other)
        {
            this->size=other.size;
        }
        /*释放本身指针成员原来的指向*/
        if(this->str!=NULL)
        {
            delete this->str;
        }
        /* 开辟空间 并重新指向新的堆区空间*/
        this->str = new char [size];
        strcpy(this->str,other.str);

        return *this;
    }

    //判空函数 无参数
    void is_empty()
    {
        int len = strlen(this->str);
        if(len == 0)
            cout<<"空,无内容"<<endl;
        else
            cout<<"非空,有内容"<<endl;
    }

    //size函数 无参数
    int ssize() const
    {
        return strlen(this->str);
    }

    //c_str函数
    char *c_str()
    {
        return this->str;
    }

    //at函数
    char my_at(int mark)
    {
        if(mark>size || mark<0)
        {
            cout<<"越界"<<endl;
            return NULL;
        }
        return this->str[mark];
    }

    //加号运算符重载
    const MyString operator+(const MyString & R) const
    {
        int len = this->ssize()+R.ssize()+1;
        MyString tempstr ;
        if(tempstr.str!=nullptr){
            delete tempstr.str;
            tempstr.size = 0;
        }
        if(NULL == R.str)
        {
            tempstr.str = new char [this->ssize()];
            strcpy(tempstr.str,this->str);
            tempstr.size = this->size;
            return tempstr ;
        }
        tempstr.str = new char [len];
        tempstr.size = len-1;
        strcpy(tempstr.str,this->str);
        strcat(tempstr.str,R.str);
        return tempstr;
    }

    //加等于运算符重载
    MyString operator+=(const MyString & R)
    {
        int len = this->ssize()+R.ssize()+1;
        if(len == 0)
            return *this;
        this->size = len-1;
        char * pstr = new char[len];
        strcpy(pstr,this->str);
        strcat(pstr,R.str);
        delete this->str;
        this->str = pstr;
        return *this;
    }

    //关系运算符重载
    bool operator>(const MyString & R) const
    {
        if(strcmp(this->str,R.str)>0)
            return true;
    }

    //中括号运算符重载
    char operator[](const int& mark) const
    {
        char s = this->str[mark];
        return s;
    }


    void out()
    {
        cout<<str<<endl;
    }
};


int main()
{
    MyString s1("lsm1314");
    s1.out();
    s1.is_empty();
    cout<<s1.ssize()<<endl;
    cout<<"c_str = "<<s1.c_str()<<endl;
    cout<<"at = "<<s1.my_at(4)<<endl;

    MyString s2 = s1;
    s2.out();

    MyString s3;
    s3=s1;
    s3.out();

    MyString s4;
    s4.is_empty();
    s4.out();

    MyString s5("hhh");
    MyString s6 = s1+s5;
    s6.out();

    MyString s7("eee");
    s6+=s7;
    s6.out();

    MyString s8("zzz");
    if(s8>s5)
    {
        cout<<"s8>s5"<<endl;
    }

    cout<<s1[6]<<endl;


    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1012420.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【案例】光电兼修的Alpha Cen,如何应对上升期的甜蜜烦恼?

Alpha Cen&#xff08;比邻星光&#xff09;是一家挺酷的公司&#xff0c;专注于超表面技术芯片研发。 所谓超表面芯片&#xff0c;就是通过控制类似下图的一个个独立纳米级别单元实现光操控。用微纳光学超表面技术能够平面化集成唯一还不在wafer上的光学器件&#xff0c;这意…

满载大模型技能干货的AI Day活动全新来袭

AI大模型时代&#xff0c;创造力才是第一生产力&#xff01; 满载大模型技能干货的AI Day主题活动全新来袭 丰富有趣的Workshop即将空降你的学校 帮助大家掌握前沿技能、拓展技术视野、迈进AIGC的大门 打造属于你的AI应用&#xff0c;满足不同阶段的学习实践需求 无论你是零基础…

面渣逆袭:微服务三十三问,两万字图文详解,速收藏

大家好&#xff0c;我是老三&#xff0c;面渣逆袭系列继续&#xff0c;这期给大家带来微服务相关的面试题。 概览 1.什么是微服务&#xff1f; 微服务&#xff08;Microservices&#xff09;是一种软件架构风格&#xff0c;将一个大型应用程序划分为一组小型、自治且松耦合的…

线程同步互斥锁

共用三个函数&#xff1a; mutex_lock() mutex_unlock() mutex_trylock() pthread_mutex_lock给安卓上层使用&#xff0c;mutex_lock给kernel使用&#xff0c;本质是一样的&#xff0c;都是IPC通信中的互斥锁&#xff0c;只不过安卓上层封装出pthread_mutex_lock。 pthr…

一篇文章带你了解立仪点激光位移传感器

激光位移传感器是利用激光技术进行测量的传感器。它由激光器、激光检测器和测量电路组成。激光传感器是新型测量仪表。能够精确非接触测量被测物体的位置、位移等变化。 可以测量位移、厚度、振动、距离、直径等精密的几何测量。激光有直线度好的优良特性&#xff0c;同样激光…

WOODWARD 5466-425 确保一致、无差错的配置和实施

WOODWARD 5466-425 确保一致、无差错的配置和实施 虽然许多大型制造公司已在其 IT 部门使用虚拟化多年&#xff0c;但 DeltaV Virtual Studio 专为过程控制系统而设计&#xff0c;具有自动化工程师直观且熟悉的工作流程和功能集。预构建的虚拟机模板可以轻松创建虚拟机&am…

ChatGPT充值,银行卡被拒绝,图文教程

目录 前言步骤1. 魔法地址选择2. 选择手机号码(归属地)3. 勾选,服从协议4. 填写信息5. 完善账单地址6. 订阅成功前言 大家好,今天我在订阅ChatGPT4时,遭遇了银行卡被拒绝的尴尬境地。这里有个技巧,助你开心畅享ChatGPT Plus的升级版。 可SiXin我,索取详细图文教程。 …

教学计划编制问题

教学计划编制问题 学生姓名&#xff1a;XX 指导老师&#xff1a;XXX 摘 要 本课程设计主要针对计算机系本科课程&#xff0c;根据课程之间的依赖关系&#xff0c;制定课程安排计划&#xff0c;并满足各学期课程数目大致相同。在课程设计中&#xff0c;系统开发平台为Windows…

中秋快乐! Happy Mid-autumn Festival!

中秋节代表着团圆。在我国&#xff0c;中秋节时&#xff0c;在外的游子都会赶回家&#xff0c;和家人一起赏月、吃月饼&#xff0c;所以&#xff0c;中秋节象征着家庭的圆满、人们的团聚&#xff0c;也寄托着人们对生活无限的热爱和对美好生活的向往。The Mid-Autumn Festival …

STM32外部复位IC与看门狗冲突,无法复位问题解决方案

使用STM32H743制作了一款飞控&#xff0c;外部复位IC采用MAX809STR,打板完后&#xff0c;烧录飞控固件后大量板子无法正常启动&#xff0c;怀疑是晶振没有起振或MCU未焊接好&#xff0c;检查后均焊接正常&#xff0c;编写裸机LED定时闪烁验证程序可正常运行。经网上查询资料锁定…

Linux学习记录——이십팔 网络基础(1)

文章目录 1、了解2、网络协议栈3、TCP/IP模型4、网络传输1、同一局域网&#xff08;子网&#xff09;2、局域网通信原理3、跨一个路由器的两个子网4、其它 详细的网络发展历史就不写了 1、了解 为什么会出现网络&#xff1f;一开始多个计算机之间想要共享文件&#xff0c;就得…

clickhouse union all之后数据量不一致

环境&#xff1a; clickhouse版本&#xff1a;22.8.16.32 问题&#xff1a;clickhouse使用union all查询结果与每一段sql查询结果只和不一致 原因&#xff1a;因为clickhouse版本问题&#xff0c;官方给出不同的解释 解决方案&#xff1a;将union all的每一段sql用括号括起来…

kafka知识点汇总

kafka是什么&#xff1f; Kafka是一个分布式的基于发布/订阅模式的消息队列&#xff08;Message Queue&#xff09;&#xff0c;主要应用于大数据实时处理领域。 Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。Kafka是一种高吞吐量的分布…

Frp实现外网访问内网服务

一、需求背景 博主在本地电脑&#xff08;Windows&#xff09;上安装了一款BS架构的软件&#xff0c;现在想要其他人通过域名直接访问本地电脑的web服务。 二、准备事项 &#xff08;一&#xff09;前置条件 公网IP&#xff08;可以购买阿里云轻量服务器&#xff09;域名&a…

【藏经阁一起读】(68)__《ECS技术实战指南》

【藏经阁一起读】&#xff08;68&#xff09;__《ECS技术实战指南》 目录 一、知识收获 &#xff08;1&#xff09;、CIPU &#xff08;2&#xff09;、RDMA 二、个人建议 一、知识收获 &#xff08;1&#xff09;、CIPU 1、多模态、海量数据、超大模型成为发展方向&#…

基于Face++网络爬虫+人脸融合算法智能发型推荐程序——深度学习算法应用(含Python及打包exe工程源码)+爬虫数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境Pycharm 环境 模块实现1. Face.APl调用1&#xff09;Face.APl介绍2&#xff09;调用API 2. 数据爬取1&#xff09;网络数据爬取步骤2&#xff09;爬虫实现 3. 模型构建4. 用户界面设计1&#xff09;需要调用的库文…

肖sir__mysql之多表练习题__006

已知2张基本表&#xff1a;部门表&#xff1a;dept &#xff08;部门号&#xff0c;部门名称&#xff09;;员工表 emp&#xff08;员工号&#xff0c;员工姓名&#xff0c;年龄&#xff0c;入职时间&#xff0c;收入&#xff0c;部门号&#xff09; 1&#xff1a;dept表中有4条…

论文解读 | 基于视觉的水果采摘机器人识别与定位方法研究进展

原创 | 文 BFT机器人 01 背景 在复杂的农业环境中&#xff0c;利用机器视觉及其相关算法可以提高收割机器人的效率、功能性、智能化和远程互动性。对于水果采摘机器人系统来说&#xff0c;主要的挑战包括免提导航和水果定位&#xff0c;以及大多数果园中常见的崎岖地形和大型…

Direct3D纹理映射

借助纹理映射技术&#xff0c;我们可将图像数据映射到三角形单元中&#xff0c;这种功能可以显著地增加所绘制场景的细节和真实感&#xff0c;例如创建一个立方体然后为其每个面映射一个板条纹理&#xff0c;从而将该立方体变为一个板条箱&#xff0c;在Direct3D中纹理用接口ID…

武汉凯迪正大—高压信号发生器

一、产品介绍 本产品是我公司在长期从事电缆故障测试研究方面新开发的创新型换代产品&#xff0c;采用大屏幕彩色液晶显示器、指示高压侧真实电压值、具有过压、过流保护。该产品满足《中华人民共和国电力行业标准&#xff0c;高压试验装置通用技术条件》&#xff0c;主要用于对…