C++第四讲

思维导图

 仿照string类,实现myString类

/* ---------------------------------@author:YoungZorncreated on 2023/7/19 19:20.---------------------------------
*/
#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对象str为空串}//有参构造myString(const char *s)          //string  s("hello world"){size = strlen(s);str = new char[size+1];   //末尾添加 '\0'strcpy(str, s);   //--->str = "hello world"}//拷贝构造myString(const myString & other):str(new char(*other.str)),size(other.size){}//析构函数~myString(){delete str;}//拷贝赋值函数myString& operator=(const myString& other){if(this != &other){delete str;  //释放原有的内存this->size = other.size;this->str = new char(*(other.str));}return *this;}//判空函数bool isEmpty(){if(strcmp(str,"") == 0){return true;}return false;}//size函数int strSize(){if (isEmpty()){return -1;}return strlen(str);}//c_str函数const char *str_c_str()const{return str;   //返回一个C风格的字符串}//at函数char &at(int pos){if (isEmpty()){const int &ref = -1;return (char &)ref;}return str[pos];   //返回字符串下标的字符}//加号运算符重载  (+)const myString operator+ (const myString & R) const{int newSize = size + R.size;  //新字符串的长度char *newStr = new char[newSize+1];  //分配新字符串内存strcpy(newStr, this->str);strcat(newStr,R.str);return myString(newStr);}//加等于运算符重载 (+=)const myString operator+= (const myString & R){size += R.size;  //更新sizestrcat(this->str,R.str);  //将R.str追加到str上return myString(this->str);}//关系运算符重载 (>)bool operator> (const myString & R) const {int flag = strcmp(this->str,R.str);if (flag > 0)return true;return false;}
};int main(){myString string1 = "hello";bool flag = string1.isEmpty();cout<<flag<<endl;cout<<string1.strSize()<<endl;cout<<"at[0]:"<<string1.at(0)<<endl;myString s1 = "qwe";myString s2 = "asd";cout<<(s1>s2)<<endl; //判断 s1 和 s2 的大小s1 += s2;cout<<"s1 += s2 = "<<s1.str_c_str()<<endl;  // +=cout<<s1.str_c_str()<<endl;myString s3 = "aaa";myString s4 = "bbb";myString s5 = s3 + s4;cout<<"s3 + s4 = "<<s5.str_c_str()<< endl;  // +return 0;
}

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

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

相关文章

【Windows】查找占用端口的进程、结束进程

记录一下在windows环境下通过命令行窗口进行进程有关的几个操作。 1、查找占用端口的进程ID(PID)&#xff1a; netstat -ano|findstr 28087 假如PID为21812、根据PID找进程名称&#xff1a; tasklist | findstr 2181 发现是占用28087端口的进程为&#xff1a;java.exe。 3、…

【数据结构】时间复杂度---OJ练习题

目录 &#x1f334;时间复杂度练习 &#x1f4cc;面试题--->消失的数字 题目描述 题目链接&#xff1a;面试题 17.04. 消失的数字 &#x1f334;解题思路 &#x1f4cc;思路1&#xff1a; malloc函数用法 &#x1f4cc;思路2&#xff1a; &#x1f4cc;思路3&…

LeetCode(字节10日)-0714

648. 单词替换(中等) 思路&#xff1a;前缀树匹配 // 思路&#xff1a;前缀树匹配&#xff0c;成功返回前缀&#xff0c;失败返回 null&#xff0c;保留原来单词值 // 多个词根时使用最短词根&#xff0c;不需要 fail 指针 // string 处理使用 stringBuilder&#xff0c;避…

如何使用DiskPart命令行格式化分区?

想要格式化磁盘分区&#xff0c;您可以使用磁盘管理工具&#xff0c;或在Windows文件资源管理器中右键单击驱动器并选择“格式化”。如果您更想使用命令行来格式化磁盘&#xff0c;那么Windows自带的DiskPart将是首选。 DiskPart有很多优点&#xff0c;例如&#xff0c;如果您想…

最短Hamilton路径

题目 给定一张 n 个点的带权无向图&#xff0c;点从 0∼n−1 标号&#xff0c;求起点 0 到终点 n−1 的最短 Hamilton 路径。 Hamilton 路径的定义是从 0 到 n−1 不重不漏地经过每个点恰好一次。 输入格式 第一行输入整数 n。 接下来 n 行每行 n 个整数&#xff0c;其中第…

活动页服务端渲染探索

目标 通过采用在服务端渲染激励页的方式&#xff0c;降低页面加载白屏时间&#xff0c;从而提升激励 H5 渲染体验。 架构设计 前端服务框架调研选型 只对比分析以下两种方案&#xff1a; Vue3 Nuxt3 WebpackNext.js React Node.js ’Nuxt3Next.js介绍Nuxt是一个基于Vu…

Clickhouse基础和基本优化

CK基础和基本优化 一、ClickHouse的特点列式存储高吞吐写入能力数据分区与线程级并行表引擎的使用MergeTreeReplacingMergeTreeSummingMergeTree 二、SQL操作1.Insert2.Update 和 Delete3.查询操作4.alter操作5.导出数据 三、基于表的分布式集群集群写入流程&#xff08; 3分片…

旅游卡加盟代理合伙人模式软件开发

旅游卡加盟代理合伙人模式是近年来逐渐兴起的一种旅游产业发展模式&#xff0c;它通过将旅游卡加盟商与代理商紧密结合&#xff0c;实现资源共享、风险共担、合作共赢的目标。而软件开发作为旅游卡加盟代理合伙人模式的重要技术支持&#xff0c;对于该模式的实施和发展起着至关…

深入理解Java虚拟机(二)Java内存区域与内存溢出异常

一、前言 对于Java程序员来说&#xff0c;在虚拟机自动内存管理机制的帮助下&#xff0c;不再需要为每一个new操作去写配对的delete/free代码&#xff0c;不容易出现内存泄漏和内存溢出问题&#xff0c;看起来由虚拟机管理内存一切都很美好。不过&#xff0c;也正是因为Java程序…

SQLite和SDK基本概念

SQLite是一种轻量级的关系型数据库管理系统 (RDBMS)&#xff0c;它以文件形式存储数据&#xff0c;不需要独立的服务器进程&#xff0c;可以直接集成到应用程序中使用。SQLite的设计目标是提供一种简单、快速、可靠的数据库解决方案&#xff0c;适用于各种规模的应用程序和设备…

iOS APP外包开发的语言比较

iOS APP是Apple公司运行在iPhone手机上的APP&#xff0c;开发这样的APP有两种开发语言可以选择&#xff0c;都是由Apple公司提供的语言。其中Objective-C使用时间相对较长&#xff0c;有历史兼容考虑&#xff0c;而Swift是新的开发语言&#xff0c;更符合近些年开发语言的发展理…

Vue单页面实现el-tree el-breadcrumb功能、el-tree右键点击树节点展示菜单功能、树节点编辑节点字段名称功能

(1) 点击el-tree节点 使用el-breadcrumb展示选中树节点及父项数据 重点&#xff1a;handleNodeClick方法、getTreeNode方法 (2) 选择el-breadcrumb-item设置el-tree节点选中 必须设置属性: current-node-key"currentNodeKey" 、 node-key"id" 重点: 设置…

如何应对.kann勒索病毒:恢复数据的有效策略

导言&#xff1a; 随着科技的发展和互联网的普及&#xff0c;网络安全问题越来越受到人们的关注。而在网络安全领域&#xff0c;勒索病毒是一类极具破坏力的恶意软件。其中&#xff0c; .kann 勒索病毒是近期出现的一种恶意软件变种。91数据恢复本文将介绍什么是 .kann 勒索病毒…

05 Docker 安装常用软件 (mongoDB)

目录 1. mongoDB简介 1.1 mongodb的优势 2. mongodb的安装 2.1 创建数据文件夹 2.2 备份日志 2.3 配置文件夹 2.4 创建两个文件 ---> 2.4.1 配置如下: 2.5 拉取mongodb 2.6 运行容器 2.7 进入mongodb容器 ---> 2.7.0 高版本(6.0)以上是这样的 , 旧版的没研究 …

C++的虚函数与纯虚函数

C的虚函数是一种特殊的成员函数&#xff0c;用于实现多态性。虚函数允许在基类中声明一个函数&#xff0c;在派生类中根据需要进行重写&#xff0c;并通过基类指针或引用来调用派生类对象的特定实现。 ①虚函数的声明 ②多态性 ③派生类重写虚函数 ④纯虚函数 ⑤注意 ①虚…

服务保护 Sentinel

服务保护 Sentinel Sentinel 介绍Sentinel 的下载使用Sentinel 流控规则流控规则介绍流控规则演示 Sentinel 热点规则Sentinel 隔离和熔断降级Feign 整合 Sentinel线程隔离熔断降级 Sentinel 授权规则Sentinel 系统规则Sentinel 自定义异常Sentinel 资源定义url 默认资源抛出异…

课程上新!5天学懂大数据框架Kafka

学习Kafka对于现代数据处理和分析至关重要。它能够帮助我们处理海量数据流&#xff0c;确保数据的可靠性&#xff0c;支持实时流处理&#xff0c;并且具有广泛的应用场景。通过掌握Kafka的知识和技能&#xff0c;我们可以在数据驱动的世界中更好地应对挑战&#xff0c;取得更大…

【力扣周赛】第 354 场周赛

文章目录 Q1&#xff1a;6889. 特殊元素平方和思路——简单模拟题竞赛时代码 Q2&#xff1a;6929. 数组的最大美丽值思路——差分数组&#xff0c;计算每个数字可能出现的次数竞赛时代码解法2——排序 双指针⭐解法3——排序 二分查找 Q3&#xff1a;6927. 合法分割的最小下标…

Linux 漏洞扫描

Linux 漏洞扫描程序会仔细检查基于 Linux 的系统&#xff0c;以减轻潜在的风险和漏洞。 什么是 Linux 漏洞扫描程序 Linux 漏洞扫描程序是一种专门的漏洞扫描工具&#xff0c;旨在识别基于 Linux 的系统中的安全漏洞和弱点,它会扫描配置错误、过时的软件版本和已知漏洞。 为…

pytorch学习--第一个模型(线性模型)

目标 我们想通过随机初始化的参数 ω , b \omega ,b ω,b能在迭代过程中使预测值和目标值能无限接近 y ω x b y\omega xb yωxb 定义数据 x torch.rand([60, 1])*10 y x*2 torch.randn(60,1)构建模型 利用pytorch中的nn.Module 想要构建模型时&#xff0c;继承这个类…