c++924

2

#include <iostream>
#include <cstring>using namespace std;class MyString {
private:char *str;          // 记录C风格的字符串int size;           // 记录字符串的实际长度public:// 定义无参构造MyString() : size(0) {str = new char[1];str[0] = '\0';cout << "MyString::无参构造,this = " << this << endl;}// 定义有参构造MyString(const char *s) {size = strlen(s);str = new char[size + 1];strcpy(str, s);cout << "MyString::有参构造,this = " << this << endl;}// 定义拷贝构造函数MyString(const MyString &other) : str(new char[other.size + 1]), size(other.size) {strcpy(this->str, other.str);cout << "MyString::拷贝构造,this = " << this << endl;}// 定义拷贝赋值函数MyString &operator=(const MyString &other) {if (this != &other) {  // 防止自己给自己赋值delete[] str;size = other.size;str = new char[size + 1];strcpy(str, other.str);}cout << "MyString::拷贝赋值,this = " << this << endl;return *this;}// 定义析构函数~MyString() {delete[] str;cout << "MyString::析构函数,this = " << this << endl;}// 判空函数bool empty() const {return size == 0 || str[0] == '\0';}// size函数int my_size() const {return size;}// c_str函数const char *c_str() const {return str;}// at函数char &at(int pos) {if (pos < 0 || pos >= size) throw std::out_of_range("Index out of range");return str[pos];}// [] 运算符重载char &operator[](int pos) {if (pos < 0 || pos >= size) throw std::out_of_range("Index out of range");return str[pos];}// + 运算符重载MyString operator+(const MyString &other) const {char *temp = new char[size + other.size + 1];strcpy(temp, str);strcat(temp, other.str);MyString result(temp);delete[] temp;return result;}// += 运算符重载MyString &operator+=(const MyString &other) {char *temp = new char[size + other.size + 1];strcpy(temp, str);strcat(temp, other.str);delete[] str;str = temp;size += other.size;return *this;}// += 运算符重载(加等一个字符)MyString &operator+=(char ch) {char *temp = new char[size + 2];strcpy(temp, str);temp[size] = ch;temp[size + 1] = '\0';delete[] str;str = temp;++size;return *this;}// == 运算符重载bool operator==(const MyString &other) const {return strcmp(str, other.str) == 0;}// != 运算符重载bool operator!=(const MyString &other) const {return !(*this == other);}// > 运算符重载bool operator>(const MyString &other) const {return strcmp(str, other.str) > 0;}// < 运算符重载bool operator<(const MyString &other) const {return strcmp(str, other.str) < 0;}// >= 运算符重载bool operator>=(const MyString &other) const {return !(*this < other);}// <= 运算符重载bool operator<=(const MyString &other) const {return !(*this > other);}// << 运算符重载friend ostream &operator<<(ostream &os, const MyString &ms) {os << ms.str;return os;}// >> 运算符重载friend istream &operator>>(istream &is, MyString &ms) {char buffer[1024];is >> buffer;ms = MyString(buffer);return is;}
};int main() {// 调用无参构造MyString s1;cout << "my_size = " << s1.my_size() << "  str1 = " << s1.c_str() << endl;// 调用有参构造MyString s2("XHJ");cout << "my_size = " << s2.my_size() << "  str2 = " << s2.c_str() << endl;// 调用拷贝构造MyString s3(s2);cout << "my_size = " << s3.my_size() << "  str3 = " << s3.c_str() << endl;// 调用at函数cout << "第一个字符:" << s3.at(0) << endl;cout << "第二个字符:" << s3.at(1) << endl;cout << "第三个字符:" << s3.at(2) << endl;// 调用有参构造MyString s4("");cout << "my_size = " << s4.my_size() << "  str4 = " << s4.c_str() << endl;// 调用empty函数// 判断字符串s3是否为空if (s3.empty())cout << "s3字符串为空!" << endl;elsecout << "s3字符串不为空!" << endl;// 判断字符串s4是否为空if (s4.empty())cout << "s4字符串为空!" << endl;elsecout << "s4字符串不为空!" << endl;// 测试 += 运算符s4 += "XHJ";cout << "my_size = " << s4.my_size() << "  str4 = " << s4.c_str() << endl;// 测试 + 运算符MyString s5 = s2 + s3;cout << "s5 = " << s5.c_str() << endl;// 测试比较运算符cout << "s2 == s3: " << (s2 == s3) << endl;cout << "s2 != s3: " << (s2 != s3) << endl;cout << "s2 > s3: " << (s2 > s3) << endl;cout << "s2 < s3: " << (s2 < s3) << endl;cout << "s2 >= s3: " << (s2 >= s3) << endl;cout << "s2 <= s3: " << (s2 <= s3) << endl;// 测试流操作符MyString s6;cout << "请输入一个字符串: ";cin >> s6;cout << "你输入的字符串是: " << s6 << endl;return 0;
}

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

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

相关文章

中秋节特别游戏:给玉兔投喂月饼

&#x1f5bc;️ 效果展示 &#x1f4dc; 游戏背景 在中秋这个充满诗意的节日里&#xff0c;玉兔因为贪玩被赶下人间。在这个温柔的夜晚&#xff0c;我们希望通过一个小游戏&#xff0c;让玉兔感受到人间的温暖和关怀。&#x1f430;&#x1f319; &#x1f3ae; 游戏设计 人…

5、论文阅读:深水下的图像增强

深水下的图像增强 前言介绍贡献UWCNN介绍网络架构残差Residuals块 Blocks网络层密集串联网络深度减少边界伪影网络损失Loss后处理前言 水下场景中,与波长相关的光吸收和散射会降低图像的可见度,导致对比度低和色偏失真。为了解决这个问题,我们提出了一种基于卷积神经网络的…

伊犁云计算22-1 apache 安装rhel8

1 局域网网络必须通 2 yum 必须搭建成功 3 apache 必须安装 开干 要用su 用户来访问 一看httpd 组件安装完毕 到这里就是测试成功了 如何修改主页的目录 网站目录默认保存在/var/WWW/HTML 我希望改变/home/www 122 127 167 行要改

打造灵活DateTimePicker日期时间选择器组件:轻松实现时间的独立清除功能

element ui中日期和时间选择器&#xff08;DateTimePicker&#xff09;是一个常见且重要的组件。它允许用户轻松地选择日期和时间&#xff0c;极大地提升了用户体验。然而&#xff0c;在某些场景下&#xff0c;用户可能需要更细粒度的控制&#xff0c;例如单独清除已选择的时间…

Swagger 概念和使用以及遇到的问题

前言 接口文档对于前后端开发人员都十分重要。尤其近几年流行前后端分离后接口文档又变 成重中之重。接口文档固然重要,但是由于项目周期等原因后端人员经常出现无法及时更新&#xff0c; 导致前端人员抱怨接口文档和实际情况不一致。 很多人员会抱怨别人写的接口文档不…

Cassandra 5.0 Spring Boot 3.3 CRUD

概览 因AI要使用到向量存储&#xff0c;JanusGraph也使用到Cassandra 卸载先前版本 docker stop cassandra && docker remove cassandra && rm -rf cassandra/运行Cassandra容器 docker run \--name cassandra \--hostname cassandra \-p 9042:9042 \--pri…

【HarmonyOS】深入理解@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

【HarmonyOS】深入理解Observed装饰器和ObjectLink装饰器&#xff1a;嵌套类对象属性变化 前言 之前就Observed和ObjectLink写过一篇讲解博客【HarmonyOS】 多层嵌套对象通过ObjectLink和Observed实现渲染更新处理&#xff01; 其中就Observe监听类的使用&#xff0c;Object…

ZXing.Net:一个开源条码生成和识别器,支持二维码、条形码等

推荐一个跨平台的非常流行的条码库&#xff0c;方便我们在.Net项目集成条码扫描和生成功能。 01 项目简介 ZXing.Net是ZXing的.Net版本的开源库。支持跨多个平台工作&#xff0c;包括 Windows、Linux 和 macOS&#xff0c;以及在 .NET Core 和 .NET Framework 上运行。 解码…

硬件看门狗导致MCU启动时间慢

最近&#xff0c;在项目交付过程中&#xff0c;我们遇到了一个有趣的问题&#xff0c;与大家分享一下。 客户的需求是&#xff1a;在KL15电压上电后&#xff0c;MCU需要在200ms内发送出第一包CAN报文数据。然而&#xff0c;实际测试结果显示&#xff0c;软件需要360ms才能发送…

【通俗易懂介绍OAuth2.0协议以及4种授权模式】

文章目录 一.OAuth2.0协议介绍二.设计来源于生活三.关于令牌与密码的区别四.应用场景五.接下来分别简单介绍下四种授权模式吧1.客户端模式1.1 介绍1.2 适用场景1.3 时序图 2.密码模式2.1 介绍2.2 适用场景2.3时序图 3.授权码模式3.1 介绍3.2 适用场景3.3 时序图 4.简化模式4.1 …

MES系统如何提升制造企业的运营效率和灵活性

参考拓展&#xff1a;苏州稳联-西门子MES系统-赋能智能制造的核心引擎 制造执行系统(MES)在提升制造企业运营效率和灵活性方面发挥着关键作用。 一、MES系统的基本概念和功能 MES系统是连接企业管理层与生产现场的重要桥梁。它主要负责生产调度、资源管理、质量控制等多个方…

安全热点问题

安全热点问题 1.DDOS2.补丁管理3.堡垒机管理4.加密机管理 1.DDOS 分布式拒绝服务攻击&#xff0c;是指黑客通过控制由多个肉鸡或服务器组成的僵尸网络&#xff0c;向目标发送大量看似合法的请求&#xff0c;从而占用大量网络资源使网络瘫痪&#xff0c;阻止用户对网络资源的正…

TMStarget学习——T1 Segmentation数据处理及解bug

最新学习季公俊老师的神器 TMStarget 的第一个模块基于结构像的靶区计算T1 segmentation。下面上步骤&#xff1a; (1)在github 上下载 TMStarget https://github.com/jigongjun/Neuroimaging-and-Neuromodulation (2)按照要求下载依赖工具软件AFQ、vistasoft、SPM12 &#…

OpenAI o1团队突破性论文:『过程推理』中数学推理能力大幅提升,从正确中学习的新方法

原创 超 近年来&#xff0c;大型语言模型(LLMs)在复杂的多步推理任务中取得了令人瞩目的进展。这些模型能够生成逐步的思维链&#xff0c;解决从小学数学到高等微积分的各种问题。然而&#xff0c;即使是最先进的模型也常常陷入逻辑陷阱&#xff0c;产生看似合理但实际错误的推…

1.3 计算机网络的分类

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言一、按分布范围分类二、按传输技术分类三、按拓扑结构分类四、按使用者分类五、按传输介质分类 前言 计算机网络根据不同的标准可以被分为多种类型&#xff0c;本章从分布…

QT----基于QML的计时器

赶上了实习的末班车,现在在做QML开发,第一天的学习成果,一个计时器.逻辑挺简单的,纯QML实现,代码在仓库QT-Timer 学习使用c的listmodel 学习使用了如何用c的listmodel来存储数据. 新建一个TImeListModel类继承自QAbstractListModel class TimeListModel : public QAbstrac…

STM32CUBEIDE FreeRTOS操作教程(五):mutex互斥信号量

STM32CUBEIDE FreeRTOS操作教程&#xff08;五&#xff09;&#xff1a;mutex互斥信号量 STM32CUBE开发环境集成了STM32 HAL库进行FreeRTOS配置和开发的组件&#xff0c;不需要用户自己进行FreeRTOS的移植。这里介绍最简化的用户操作类应用教程。以STM32F401RCT6开发板为例&am…

蓝牙技术|详谈蓝牙信道探测技术,可实现厘米级精准定位

2024年9月5日&#xff0c;蓝牙技术联盟发布蓝牙6.0核心规范。相比此前各版本&#xff0c;蓝牙核心规范6.0版的主要创新和新功能包括&#xff1a;支持蓝牙信道探测、同步适配层增强、LL扩展功能和 帧空间更新。 蓝牙信道探测 市场上已经有不少高精度定位技术了&#xff0c;像 …

ToF传感器更新

我们最近改进了 ToF 解码管道&#xff08;固件&#xff09;和 ToF 工厂校准&#xff0c;该校准已应用于我们最新的带有 ToF 相机的OAK-D-SR-PoE 1. 点云 这是直接来自摄像机的原始点云&#xff08;没有应用任何后处理过滤器&#xff09;。 2. ToF 精度 &#xff08;ToF 深度误差…

界面控件Telerik UI for WinForms 2024 Q3概览 - 支持合并单元格等

Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件。所有的UI for WinForms控件都具有完整的主题支持&#xff0c;可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。 本文将介绍界面组件Telerik UI for WinForms在今年第一…