day05 1.运算符重载

news2024/11/27 2:42:36
#include <iostream>
#include <cstring>
using namespace std;
 
class myString
{
    private:
        char *str;          //记录c风格的字符串
        int size;            //记录字符串的实际长度
    public:
        //无参构造
        myString():size(10)
        {
            str = new char[size]; //构造出一个长度为10的字符串
            cout<<"无参构造"<<endl;
        }
 
        //有参构造
        myString(const char *s)
        {
            size = strlen(s);
            str = new char[size+1];
            strcpy(str,s);
            cout<<"有参构造"<<endl;
        }
        //析构函数
        ~myString()
        {
            delete[] str;
            cout<<"析构构造"<<endl;
        }
        //show函数
        void show()
        {
            for(int i=0;i<size;i++)
            {
                cout<<str[i];
            }
            cout<<endl;
        }
 
 
        //判空函数
        bool empty()
        {
            return size==0;
        }
 
        //size函数
        int get_size()
        {
            return size;
        }
 
        //c_str函数
        char *c_str()
        {
            return str;
        }
 
 
        //定义成员函数完成为字符串赋值
        myString &operator=(myString &R)
        {
            if (this != &R)
            {
                size = R.get_size();
                str = new char[size + 1];
                strcpy(str, R.str);
            }
            return *this;
        }
        //at函数
        const char &at(int index)const
        {
            if(index<0||index>=size)
            {
                cout<<"error"<<endl;
            }
            return str[index];
        }
        //定义成员函数完成访问指定字符
        const char &operator[](int index)const
        {
            if(index<0||index>=size)
            {
                cout<<"error"<<endl;
            }
            return str[index];
        }
 
        //返回指向字符串首字符的指针
        char *data()
        {
            return str;
        }
 
        //清除内容
        void clear()
        {
            str[0] = '\0';
            size = 0;
        }
 
        //后附字符到结尾
        myString &push_back(char a)
        {
            str[size]=a;
            size++;
            return *this;
        }
 
        //移除末尾字符
        myString &pop_back()
        {
            str[size-1]='\0';
            size--;
            return *this;
        }
 
        //后附字符到结尾
        myString &operator+=(char a)
        {
            str[size]=a;
            size++;
            return *this;
        }
 
        //两个字符串连接
        myString &operator+(myString &R)
        {
            strcat(this->c_str(),R.c_str());
            size += R.size;
            return *this;
        }
 
        //定义成员函数完成==
        bool operator==(myString &R)
        {
            if(strcmp(this->c_str(),R.c_str())==0)
            {
                return true;
            }
            return false;
        }
 
        //定义成员函数完成!=
        bool operator!=(myString &R)
        {
            if(strcmp(this->c_str(),R.c_str())!=0)
            {
                return true;
            }
            return  false;
        }
 
        //<
        bool operator<(myString &R)
        {
            if(strcmp(this->c_str(),R.c_str())<0)
            {
                return true;
            }
            return false;
        }
 
        //定义成员函数完成>
        bool operator>(myString &R)
        {
            if(strcmp(this->c_str(),R.c_str())>0)
            {
                return true;
            }
            return false;
        }
 
        //定义成员函数完成>=
        bool operator>=(myString &R)
        {
            if(strcmp(this->c_str(),R.c_str())>=0)
            {
                return true;
            }
            return false;
        }
 
        //定义成员函数完成<=
        bool operator<=(myString &R)
        {
            if(strcmp(this->c_str(),R.c_str())<=0)
            {
                return true;
            }
            return false;
        }
 
        friend ostream &operator<<(ostream &L,myString &R);
        friend istream &operator>>(istream &L,myString &R);
};
 
//输出
ostream &operator<<(ostream &L,myString &R)
{
    L<<R.str;
    return L;
}
 
//输入
istream &operator>>(istream &L,myString &R)
{
    L>>R.str;
    return L;
}
 
int main()
{
    myString s1("hello world");
    s1.show();
    //调用判空函数
    if(s1.empty())
    {
        cout<<"字符串为空"<<endl;
    }
    else
    {
        cout<<"字符串非空"<<endl;
    }
    //调用size函数
    cout<<"字符串大小为"<<s1.get_size()<<endl;
    //调用赋值函数
    myString s2("ni hao");
    s1=s2;
    s1.show();
    //调用at函数
    char s='!';
    cout<<s1.at(4)<<endl;
    s1.push_back(s);
    s1.show();
    //调用两个字符串连接
    myString s3(" yyqx");
    s2+s3;
    s2.show();
 
}

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

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

相关文章

解除禁售!Ozon重新开放电子产品等品类销售,Ozon出单了怎么发货?

今年6月份&#xff0c;俄罗斯电商平台Ozon暂时关闭了电子产品、汽车配件和DIY工具三大品类&#xff0c;相关数据显示&#xff0c;有69%的电子产品是中国制造的&#xff0c;如耳机耳麦、充电器、智能手机、平板电脑、电子元器件等。这项禁售政策影响了众多卖家的销售业务&#x…

电赛2024年H题智能小车基于MSPM0G3507主控MCU(利用8路灰度加上MPU6050的解决方式)具体项目报告

题目&#xff1a;自动行驶小车&#xff08;H题&#xff09; 摘要 本项目由微处理器MSPM0G3507&#xff0c;编码器电机驱动&#xff0c;8路灰度传感器指示线巡线单元&#xff0c;MPU6050六轴传感器无线直行单元&#xff0c;OLED显示人机互动单元&#xff0c;红色LED及蜂鸣器声光…

Windows Server 2019 中文版、英文版下载 (updated Aug 2024)

Windows Server 2019 中文版、英文版下载 (updated Aug 2024) Windows Server 2019 Version 1809 请访问原文链接&#xff1a;https://sysin.org/blog/windows-server-2019/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 本站将不定期发布官方原版风格月度更…

springboot驾校预约管理系统—计算机毕业设计源码25540

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于驾校预约管理系统 当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了驾校预约管理系统 &#xff0c;它彻底改变了…

【C语言从不挂科到高绩点】08-作业练习-循环结构01

Hello!彦祖们,俺又回来了!!!,继续给大家分享 《C语言从不挂科到高绩点》课程,前面课程中给大家讲解了一些常规的知识点,那么本次课,我们一起来练习挑战一下!! 本套课程将会从0基础讲解C语言核心技术,适合人群: 大学中开设了C语言课程的同学想要专升本或者考研的同…

knime安装 OCR识别节点Tess4J

Tess4J Node是一个工具&#xff0c;它把Tesseract OCR库整合到KNIME软件中。Tesseract OCR是一个光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;的库&#xff0c;可以将图片中的文字转换成电脑可以编辑的文本。 安装过程&#xff1a; 1、在knimeh…

免费ppt模板哪里找?AI智能生成指南分享

在忙碌的工作日常中&#xff0c;制作一份精美的ppt模板似乎成了一项艰巨的任务。 但别担心&#xff0c;其实掌握以下这个小技巧&#xff0c;就能让这个过程变得轻松又高效。想要让你的演示文稿在会议中脱颖而出吗&#xff1f;想要知道ppt模板怎么制作的吗&#xff1f;跟我一起…

终极解决 docker 拉取镜像失败的问题,其他类似场景也适用

国内的网络环境&#xff0c;想必大家都是知道的&#xff0c;虽说技术无罪&#xff0c;但奈何政策不允许啊&#xff0c;以下内容我在 CSDN 上发不了&#xff0c;请大家移步我的个人公 * 号&#xff1a;新质程序猿&#xff0c;查看更多原创内容&#xff0c;这里只介绍相关背景和需…

网站建设完成后, 做seo必须知道的专业知识之--蜘蛛陷阱

蜘蛛陷阱&#xff08;Spider Trap&#xff09;是指那些阻止搜索引擎蜘蛛程序&#xff08;即爬虫程序&#xff09;正常爬行和抓取网站内容的障碍物或策略。这些陷阱通常是由网站设计或技术上的某些特定元素造成的&#xff0c;它们对搜索引擎的友好度较低&#xff0c;不利于蜘蛛程…

Java-数据结构-链表-LinkedList(一) (^_−)☆

文本目录&#xff1a; ✿一、ArrayList的优点和缺陷&#xff1a; ✿二、链表&#xff1a; ❄️1、链表的概念与结构&#xff1a; ❄️2、单向不带头非循环链表的实现&#xff1a; ❄️&#xff08;1&#xff09;、操作&#xff1a; ▶display () 方法&#xff1a; ▶size…

5千多道安全生产证考试题库ACCESS\EXCEL数据库

安全生产是保护劳动者的安全、健康和国家财产&#xff0c;促进社会生产力发展的基本保证&#xff0c;也是保证社会主义经济发展&#xff0c;进一步实行改革开放的基本条件。因此&#xff0c;做好安全生产工作具有重要的意义。今天的数据即是安全生产资格证、许可证考试题库。 大…

传统管道,匿名管道

二、传统的进程间通信-管道文件 管道是UNIX系统中最古老的进程间通信技术&#xff0c;古老意味着所有系统都支持&#xff0c;早期的管道是半双工通信&#xff0c;现有的系统管道是全双工通信 管道就是一种特殊的文件&#xff0c;数据在文件中是流动的&#xff0c;读取之…

webshell绕过样本初体验

目录 一&#xff1a;前景 二&#xff1a;样本 样本一&#xff1a; 样本二&#xff1a; 样本三&#xff1a; 样本4&#xff1a; 样本5&#xff1a; 一&#xff1a;前景 在我们日常的网站中百分之一百是存在一些安全设备来拦截我们的webshell的&#xff0c;一般情况…

苹果手机微信恢复聊天记录分享:3个恢复方法,学到就是赚到

Q&#xff1a;我微信里面的聊天记录都不见了怎么办呀&#xff1f; A&#xff1a;问我你就是问对人了&#xff0c;我这里有3个超好用的微信恢复聊天记录的方法&#xff0c;不管你的聊天记录是被误删的&#xff0c;还是由于其他的原因导致丢失&#xff0c;在这3个方法中&#xf…

人工智能 | MetaLlama 大模型

llama 大模型介绍 我们介绍 LLaMA&#xff0c;这是一个基础语言模型的集合&#xff0c;参数范围从 7B 到 65B。我们在数万亿个 Token 上训练我们的模型&#xff0c;并表明可以专门使用公开可用的数据集来训练最先进的模型&#xff0c;而无需诉诸专有的和无法访问的数据集。特别…

车牌数据集车辆数据集,全手工labelimg标注 图片清晰用于训练效果很好

车牌数据集车辆数据集&#xff0c;全手工labelimg标注 图片清晰用于训练效果很好 车牌及车辆检测数据集介绍 数据集概览 本数据集旨在为车牌识别和车辆检测任务提供高质量的训练素材。数据集完全由人工使用LabelImg工具进行标注&#xff0c;确保了标注的准确性与一致性。图…

【容器安全系列Ⅴ】- Linux强制访问控制:AppArmor 和 SELinux

在本系列中&#xff0c;我们介绍了各种安全层&#xff0c;这些安全层不仅可以将容器与主机上的其他进程隔离开来&#xff0c;还可以将容器与其底层主机隔离开来。在这篇文章中&#xff0c;我们将讨论 AppArmor 和 SELinux 如何在我们之前讨论过的其他隔离层之外提供额外的限制。…

PDF的4大限制功能详解:如何保护你的文件?

PDF是我们工作中常用的文件格式之一。有时候&#xff0c;为了保护文件的内容或使用权限&#xff0c;我们需要对PDF文件进行某些限制。通过PDF编辑器&#xff0c;可以对PDF文件设置限制保护&#xff0c;下面介绍4种常见的限制功能&#xff0c;一起来看看吧。 限制功能一&#xf…

推荐大模型面临的严峻挑战

一、技术瓶颈 &#xff08;一&#xff09;可靠性与幻觉问题 大模型在运行过程中有时会出现事实性错误&#xff0c;这便是可靠性问题&#xff0c;也被称为 “幻觉”。例如&#xff0c;它可能会弄错诗词作者&#xff0c;给出错误的文学知识。这种错误并非个例&#xff0c;而是在…

面试必备:熟悉Spring MVC工作流程,掌握Spring MVC常见注解

一、SpringMvc 基础知识点 1. Spring MVC概况 1.1 如何理解Spring MVC 大家都知道Spring MVC很强大&#xff0c;胡广问大家一个问题&#xff0c;Spring MVC为什么会出现&#xff1f;一项技术的出现必定是为了解决旧技术考虑不全所积累的软件熵。《程序员修炼之道》在软件的熵…