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; 游戏设计 人…

Oracle数据库的比较运算符Comparison Operators

Comparison operators compare one expression to another. The result is always either TRUE, FALSE, or NULL. If the value of one expression is NULL, then the result of the comparison is also NULL. 如果一个表达式的值为NULL&#xff0c;那么比较的结果也是NULL。 …

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

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

Rust调用tree-sitter解析C语言

文章目录 一、Rust 调用 tree-sitter 解析 C 语言代码1. 设置 Rust 项目2. 添加 tree-sitter 依赖3. 编写 Rust 代码4. 运行程序5. 编译出错 二、解决步骤1. 添加 tree-sitter 构建依赖2. 添加 tree-sitter-c 源代码3. 修改 build.rs 以编译 tree-sitter-c 库4. 修改 Cargo.tom…

Ubuntu中常用的操作指令

ubuntu中常通过在命令行中输入各种指令完成操作。 文件操作指令 ls&#xff1a;列出目录内容 ls cd&#xff1a;改变当前目录 # 进入指定目录 cd /path/to/directory # 返回上一级目录 cd .. # 返回用户主目录 cd ~ cp&#xff1a;复制文件或目录 # 复制文件 …

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

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

频率色散效应及其与时间选择性衰落信道的联系

频率色散效应&#xff08;Frequency Dispersion Effect&#xff09;是在无线通信中&#xff0c;由于信道中的多普勒效应引起的现象&#xff0c;它会导致接收信号频谱的扩展和频率上的变化。该效应与信道的时间变化有关&#xff0c;是时间选择性衰落信道&#xff08;time-select…

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

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

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

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

mysql性能优化-延迟写和异步写优化

MySQL 性能优化中的延迟写和异步写优化是数据库写入操作中非常重要的技术手段。这些技术可以有效减少磁盘 I/O 操作、提高数据库的吞吐量和整体性能。尤其是在高并发写操作场景下&#xff0c;通过优化写入过程&#xff0c;减少阻塞和等待时间&#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 …

第二百四十一节 JPA教程 - JPA一对一主键连接列示例、JPA一对一映射级联示例

JPA教程 - JPA一对一主键连接列示例 例子 下面的代码来自Person.java。 package cn.w3cschool.common; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.p…

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

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

Dockerfile自定义制作镜像,其中10个指令的作用分析

docker容器中 做镜像是重要的技能。 docker commit只能制作比较简单的镜像&#xff0c; 要制作比较完善的镜像&#xff0c; 自定义程度比较高的&#xff0c; 就需要用到dockerfile dockerfile可以回溯历史 动态生成镜像。 FROM是基础镜像 CMD是在容器创建的时候默认的启动命令 …

安全热点问题

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

Android webview拦截H5的接口请求并返回处理好的数据

Android webview拦截H5的接口请求并返回处理好的数据 Android 可以通过 WebView 的 shouldInterceptRequest 方法拦截到 H5 中的网络请求。这是一个 WebViewClient 中的回调方法&#xff0c;允许开发者在 WebView 发起网络请求时对其进行处理和修改。 具体使用方法如下&#…