C++ 实现运算符重载

news2024/11/20 7:23:00

代码:

#include <iostream>
#include <cstring>
 
using namespace std;
 
class myString
{
private:
    char *str;          //记录c风格的字符串
    int size;            //记录字符串的实际长度
public:
    
    //无参构造
    myString():size(10)
    {
        str = new char[size];         //构造出一个长度为10的字符串
        strcpy(str,"");         //赋值为空串
    }
 
    //有参构造
    myString(const char *s)          //string  s("hello world")
    {
        size = strlen(s)+1;
        str = new char[size];
        strcpy(str, s);
    }
 
    //拷贝构造
    myString(char *s,int i):str(new char(*s)),size(i){
        strcpy(this->str,s);
        this->size = i;
        cout<<"拷贝构造函数"<<endl;
    }
 
  //析构函数
    ~myString(){
        delete str;
    }
  
    //拷贝赋值函数
    myString &operator = (const myString &other){
        if(&other != this){
            this->str = new char[size];
            memset(str,0,size);
            strcpy(str,other.str);
        }
        return *this;
    }
 
  //判空函数
    bool empty(){
        if(strlen(str) == 0)
            return false;
        else
            return true;
    }
 
  //size函数
    int mysize(){
        return size;
    }
 
  //c_str函数
    const char* c_str(){
        return str;
    }
 
  //at函数
    char &at(int pos){
        if(pos>=size || pos<0){
            cout<<"访问越界"<<endl;
        }
        return str[pos];
    }
 
  //加号运算符重载
    const myString operator+(const myString &s)const{
       myString m;
       strcpy(m.str,this->str);
       strcat(m.str,s.str);
       m.size = strlen(m.str);
       return m;
    }
 
  //加等于运算符重载
    const myString operator+=(const myString &s){
        strcat(this->str,s.str);
        this->size = strlen(this->str);
        return *this;
    }
 
  //关系运算符重载(>)
    bool operator >(const myString &s)const{
        if(this->size < s.size){
            return false;
        }
        else{
            for(int i=0;i<this->size;i++){
                if(*(this->str+i)<*(s.str+i)){
                    return false;
                }
            }
        }
        return true;
    }
 
  //中括号运算符重载
    char & operator[](const int pos)const{
        if(pos>=size || pos<0){
            cout<<"访问越界"<<endl;
        }
        return *(str+pos);
    }
};
 
 
int main(){
 
    //展示字符串
    myString s1("ssssyyyy");
    myString s2("wwwwhhhh");
    cout<<s1.c_str()<<"     "<<s2.c_str()<<endl;
 
    //重载加法运算符
    myString s3;
    cout<<s3.mysize()<<endl;
    s3=s1+s2;
    cout<<s3.c_str()<<endl;
 
    //at运算
    cout<<s3.at(3)<<endl;
 
    //加等于
    s3+=s1;
    cout<<s3.c_str()<<endl;
    cout<<s3.mysize()<<endl;
 
    //关系运算
    if(s3>s1){
        cout<<"s3>s1"<<endl;
    }
    else
        cout<<"s3<s1"<<endl;
 
    //中括号
    cout<<s2[3]<<"     "<<s2[6]<< "     "<<s2[8]<<endl;
 
 
 
    return 0;
}

 

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

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

相关文章

侯捷 C++ STL标准库和泛型编程 —— 8 适配器

8 适配器 适配器 Adapter 只是一个小变化&#xff0c;比如改个接口&#xff0c;函数名称等等其出现在三个地方&#xff1a;仿函数适配器&#xff0c;迭代器适配器&#xff0c;容器适配器可以使用继承 / 复合的两种方式实现&#xff0c;STL中都用复合 其思想就是将该记的东西记…

U盘插上就显示让格式化是坏了吗?

U盘以其体积小巧、存储容量大、读写速度快的特点&#xff0c;在各种工作和个人使用场合中得到了广泛应用&#xff0c;因此深得用户好评。然而&#xff0c;在日常使用U盘的过程中&#xff0c;经常会遇到一些问题和挑战。今天&#xff0c;我将为大家详细解释U盘出现要求格式化的现…

嵌入式Linux应用开发-驱动大全-同步与互斥③

嵌入式Linux应用开发-驱动大全-同步与互斥③ 第一章 同步与互斥③1.4 Linux锁的介绍与使用1.4.1 锁的类型1.4.1.1 自旋锁1.4.1.2 睡眠锁 1.4.2 锁的内核函数1.4.2.1 自旋锁1.4.2.2 信号量1.4.2.3 互斥量1.4.2.4 semaphore和 mutex的区别 1.4.3 何时用何种锁1.4.4 内核抢占(pree…

用于工业物联网和自动化的 Apache Kafka、KSQL 和 Apache PLC4

由于单一系统和专有协议&#xff0c;数据集成和处理是工业物联网&#xff08;IIoT&#xff0c;又名工业 4.0 或自动化工业&#xff09;中的巨大挑战。Apache Kafka、其生态系统&#xff08;Kafka Connect、KSQL&#xff09;和 Apache PLC4X 是以可扩展、可靠和灵活的方式实现端…

MATLAB算法实战应用案例精讲-【优化算法】雪融优化器(SAO)(附MATLAB代码实现)

前言 算法原理 算法步骤 ①初始化阶段: 与大多数智能算法相似,就是随机生成一批粒子: ②探索阶段 当雪或由雪转化的液态水转化为蒸汽时,由于不规则的运动,搜索代理呈现出高度分散的特征。在这项研究中,布朗运动被用来模拟这种情况。作为一个随机过程,布朗运动被广…

讲讲项目里的仪表盘编辑器(四)分页卡和布局容器组件

讲讲两个经典布局组件的实现 ① 布局容器组件 配置面板是给用户配置布局容器背景颜色等属性。这里我们不需要关注 定义文件 规定了组件类的类型、标签、图标、默认布局属性、主文件等等。 // index.js import Container from ./container.vue; class ContainerControl extends…

六、vpp 流表+负载均衡

草稿&#xff01;&#xff01;&#xff01; vpp node其实就是三个部分 1、plugin init 2、set command 3、function 实现功能&#xff0c;比如这里的流表 今天我们再用VPP实现一个流表的功能 一、流表 1.1流表----plugin init VLIB_REGISTER_NODE 注册流表节点 // 注册流…

15-自动化测试——理论知识

目录 1.什么是自动化测试&#xff1f; 2.常见的自动化测试分类 2.1.单元测试&#xff08;Java、Python&#xff09; 2.2.接口测试&#xff08;Java、Python&#xff09; 2.3.UI测试&#xff08;移动端、网站&#xff09; 3.如何实施自动化测试&#xff1f; 4.自动化测试…

测开 | Vue速查知识点

文章目录 Vue知识1. Vue 概述2. Vue 代码格式3. Vue 指令3.1 v-bind & v-model3.2 v-on3.3 v-if和v-show3.4 v-for 4. 生命周期 Vue知识 1. Vue 概述 简介&#xff1a; Vue.js&#xff08;读音 /vjuː/, 类似于 view&#xff09; 是一套构建用户界面的 渐进式框架。与其他…

[QT编程系列-44]: Windows + QT软件闪退的检测方法

目录 一、Windows程序闪退的问题定位方法 1.1 Windows程序闪退 1.2 要找到Windows程序的crash点 1.3 当Windows程序崩溃时&#xff0c;可以尝试以下方法获取出错信息&#xff1a; 二、关键工具的进一步分析 2.1 Windows事件查看器&#xff08;Event Viewer&#xff09; …

openGauss学习笔记-87 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用简单概述

文章目录 openGauss学习笔记-87 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用简单概述87.1 授予用户权限87.2 创建/删除MOT87.3 为MOT创建索引 openGauss学习笔记-87 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用简单概述 使用…

【python的输入】sys.stdin与sys.argv

在老师的课堂里碰到了sys.stdin与sys.argv&#xff0c;虽然是很简单的东西&#xff0c;还是花了大半天的时间才勉强理解。在这里记录一下学习过程&#xff0c;方便以后用到复习。 一、sys.stdin 根据python3 library里的解释&#xff0c; sys.stdin可用于所有交互式的输入。 …

Vscode爆红Delete `␍`eslintprettier/prettier

一、先看报错 文件中爆红&#xff0c;提示 Delete ␍eslintprettier/prettier 二、解决方案 项目根目录下&#xff0c;.prettierrc.js 文件中&#xff1a; endOfLine: auto,三、重启VsCode 此时不在爆红&#xff0c;问题完美解决

STM32CubeMX学习笔记-USB接口使用(HID按键)

STM32CubeMX学习笔记-USB接口使用&#xff08;HID按键&#xff09; 一、USB简介1.1 USB HID简介 二、新建工程1. 打开 STM32CubeMX 软件&#xff0c;点击“新建工程”2. 选择 MCU 和封装3. 配置时钟4. 配置调试模式 三、USB3.1 参数配置3.2 引脚配置3.3 配置时钟3.4 USB Device…

数据分析与挖掘: 红楼梦人物关系(Python)词云图

一: 角色剧本 第一代&#xff1a;水字辈祖宗创下基业 贾源、贾演兄弟二人帮先帝打江山立下战功&#xff0c;贾演被封为宁国公&#xff08;大约有平定江山安宁天下之意&#xff09;&#xff0c;贾源被封荣国公&#xff08;大约有强国富民之功&#xff09;。贾源贾演二兄弟皆是一…

项目进展(五)-修复PCB电路板,学习32位ADC芯片ADS1285

一、前言 上个月29号放假了&#xff0c;和朋友一起去了南京(人是真滴多)&#xff0c;师兄晚放假几天&#xff0c;结果在测试时不小心把12V和GND碰触到一起了&#xff0c;导致12V短路&#xff0c;电路板几乎瘫痪了。 今天下午到学校之后就开始着手寻找问题和修复&#xff0c;最…

Kafka日志索引详解以及生产常见问题分析与总结

文章目录 1、Kafka的Log日志梳理1.1、Topic下的消息是如何存储的&#xff1f;1.1.1、 log文件追加记录所有消息1.1.2、 index和timeindex加速读取log消息日志。 1.2、文件清理机制1.2.1、如何判断哪些日志文件过期了1.2.2、过期的日志文件如何处理 1.3、Kafka的文件高效读写机制…

腾讯云服务器南京地域详细介绍、测试IP和Ping值测速

腾讯云服务器南京地域怎么样&#xff1f;南京地域很不错&#xff0c;正好处于中间的位置&#xff0c;南方北方用户均可以选择&#xff0c;网络延迟更低速度更快&#xff0c;并且目前南京地域有活动&#xff0c;南京地域可用区可选南京一区、南京二区和南京三区&#xff0c;腾讯…

软件设计模式系列之二十四——模板方法模式

在软件设计领域&#xff0c;设计模式是一组被反复使用、多次实践验证的经典问题解决方案。其中&#xff0c;模板方法模式是一种行为型设计模式&#xff0c;用于定义一个算法的骨架&#xff0c;将算法中的某些步骤延迟到子类中实现&#xff0c;从而使子类可以重新定义算法的某些…

互联网Java工程师面试题·Zookeeper 篇·第二弹

目录 13. 服务器角色 14. Zookeeper 下 Server 工作状态 15. 数据同步 16. zookeeper 是如何保证事务的顺序一致性的&#xff1f; 17. 分布式集群中为什么会有 Master&#xff1f; 18. zk 节点宕机如何处理&#xff1f; 19. zookeeper 负载均衡和 nginx 负载均衡区别 20…