c++的封装

实现my_string中可能实现的功能

#include <iostream>
#include<cstring>
using namespace std;
class my_string
{char *str;    //记录c风格的字符串int size;     //记录字符串的实际长度int capacit;//记录最大容量public://无参的构造函数my_string():size(0),capacit(15){str = new char[capacit];}// 带参数的构造函数my_string(const char *s):capacit(15) {size = strlen(s) ;if(size>capacit){extend();}str = new char[capacit];strcpy(str, s);}//拷贝构造函数my_string(const my_string &other):str(new char[other.capacit]),size(other.size),capacit(other.capacit){strcpy(str,other.str);cout<<"拷贝构造函数"<<endl;}//移动构造函数my_string(const my_string &&other):str(new char[other.capacit]),size(other.size){strcpy(str,other.str);cout<<"拷贝构造函数"<<endl;}//拷贝赋值函数my_string &operator=(const my_string&other){if(this!=&other){size=other.size;capacit=other.capacit;str=new char[capacit];strcpy(str,other.str);}cout<<"拷贝赋值函数"<<endl;return *this;}//移动赋值函数my_string &operator=(const my_string &&other){if(this!=&other){size=other.size;capacit=other.capacit;str=new char[capacit];strcpy(str,other.str);}cout<<"拷贝赋值函数"<<endl;return *this;}~my_string(){delete []str;}friend bool operator<=(const my_string &L,const my_string &R);friend bool operator>=(const my_string &L,const my_string &R);friend istream &operator>>(istream &L,my_string &R);friend ostream &operator<<(ostream &L,const my_string &R);friend bool operator>(const my_string &L,const my_string &R);friend bool operator<(const my_string &L,const my_string &R);friend bool operator!=(const my_string &L,const my_string &R);friend bool operator==(const my_string &L,const my_string &R);friend const my_string operator+(const my_string &L,const my_string &R);bool my_string_empty();//判空函数int str_size();     //字符串长度char * my_c_ctl(){//将c++的字符串转化为c风格的字符串return str;}char &at(int pos){//仿at功能return str[pos];}void extend();//二倍扩容void show();int capacity(){return this->capacit;}//清空字符串void clear(){str[0]='\0';}//push_backvoid push_back(char a){if(size>=capacit){extend();}str[this->size]=a;size++;}//pop_backbool pop_back(){if(size==0){ return false;}str[size-1]='\0';size--;return true;}//运算符+=重载函数void operator+=(char a);
};
void my_string::operator+=(char a){if(size>=capacit){extend();}str[this->size]=a;size++;
}
void my_string::extend(){char *arg;arg=new char[capacit*2+1];//在堆区申请一个两倍capacity大小的空间strcpy(arg,str);//将原先str字符串复制到arg中;delete []str;//删除原先的在堆区的strstr=arg;
}
void my_string::show(){cout<<str<<endl;
}
bool my_string::my_string_empty(){//判空函数if(strlen(str)==0){return true;}elsereturn false;
}
int my_string::str_size(){     //字符串长度return strlen(str);
}
//运算符+重载函数
const my_string operator+(const my_string &L,const my_string &R){my_string temp;temp.size = L.size + R.size;temp.capacit=L.capacit;if(temp.size>=temp.capacit){temp.extend();}temp.str = new char[temp.capacit];strcpy(temp.str, L.str);strcat(temp.str, R.str);return temp;
}//运算符==重载函数
bool operator==(const my_string &L,const my_string &R){return strcmp(L.str,R.str)==0;
}
//运算符!=重载函数
bool operator!=(const my_string &L,const my_string &R){return strcmp(L.str,R.str)!=0;
}
//运算符>重载函数
bool operator>(const my_string &L,const my_string &R){return strcmp(L.str,R.str)>0;
}
//运算符>=重载函数
bool operator>=(const my_string &L,const my_string &R){return strcmp(L.str,R.str)>=0;
}
//运算符<=重载函数
bool operator<=(const my_string &L,const my_string &R){return strcmp(L.str,R.str)<=0;
}
//运算符<重载函数
bool operator<(const my_string &L,const my_string &R){return strcmp(L.str,R.str)<0;
}
//<<重载函数
ostream &operator<<(ostream &L,const my_string &R){L<<R.str<<endl;return L;
}
//>>重载函数
istream &operator>>(istream &L,my_string &R){L>>R.str;R.size=strlen(R.str);return L;
}
int main()
{my_string s1("aaa");my_string s2(s1);s2.show();cout<<"********************************"<<endl;my_string s3;s3=s2;s3.show();cout<<"********************************"<<endl;my_string s4=s1+s2;s4.show();cout<<"********************************"<<endl;if(s4!=s1){cout<<"yes"<<endl;}else{cout<<"no"<<endl;}cout<<"********************************"<<endl;my_string s5="abcd";cout<<s5;cout<<"********************************"<<endl;my_string s6;cin>>s6;cout<<s6;cout<<"********************************"<<endl;s6.push_back('a');cout<<s6;cout<<"********************************"<<endl;s6.clear();cout<<s6;cout<<"********************************"<<endl;cout<<s5.capacity();return 0;
}

 

 

 

 

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

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

相关文章

【人工智能学习笔记】1_人工智能基础

本系列是个人学习《阿里云人工智能工程师ACA认证免费课程&#xff08;2023版&#xff09;》的笔记&#xff0c;仅为个人学习记录&#xff0c;欢迎交流&#xff0c;感谢批评指正 人工智能概述 智能的三大能力&#xff1a;感知、记忆与思维、学习与适应能力人工智能的定义 明斯基…

AI文献综述神器,有这一款就够了!

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 当前的AI辅助文献综述的工具有很多&#xff0c;如果说功能最强大的&#xff0c;娜姐无疑要推SciSpace了。 SciSpace利用强大的AI算法&#xff0c;理解并建立研究论文之间的联…

图特征工程实践指南:从节点中心性到全局拓扑的多尺度特征提取

图结构在多个领域中扮演着重要角色&#xff0c;它能有效地模拟实体间的连接关系&#xff0c;通过从图中提取有意义的特征&#xff0c;可以获得宝贵的信息提升机器学习算法的性能。 本文将介绍如何利用NetworkX在不同层面&#xff08;节点、边和整体图&#xff09;提取重要的图…

FPGA开发:Verilog数字设计基础

EDA技术 EDA指Electronic Design Automation&#xff0c;翻译为&#xff1a;电子设计自动化&#xff0c;最早发源于美国的影像技术&#xff0c;主要应用于集成电路设计、FPGA应用、IC设计制造、PCB设计上面。 而EDA技术就是指以计算机为工具&#xff0c;设计者在EDA软件平台上…

华为 HCIP-Datacom H12-821 题库 (4)

有需要题库的可以看主页置顶 V群仅进行学习交流 1.缺省情况下&#xff0c;广播型网络中运行 IS-IS 的路由器&#xff0c;DIS 发送 CSNP报文的周期为多少秒&#xff1f; A、10 B、3.3 C、30 D、40 答案&#xff1a;A 解析&#xff1a; 广播型网络中运行 IS-IS 的路由器&am…

ubuntu 20.04 一直卡在登录界面,即使密码正确也无法登录(失败记录)

ubuntu 20.04 一直卡在登录界面&#xff0c;即使密码正确也无法登录 这次是装实体机&#xff0c;一次失败的尝试。。。 名称型号CPUIntel Xeon E5-2673 V3GPURTX 3060 mobile 安装的时候不要选install third-party software for graphics and Wi-fi hardware and additional …

ansible+awx搭建

1、环境介绍 操作系统版本&#xff1a;龙蜥os 8.9 docker 版本&#xff1a;26.0.2 python版本&#xff1a;3.11.9 ansible版本&#xff1a;2.16.6 awx版本&#xff1a;24.2.0 2、安装docker 设置软件源 yum install -y yum-utilsyum-config-manager \--add-repo \https://mirr…

9. GIS技术支持工程师岗位职责、技术要求和常见面试题

本系列文章目录&#xff1a; 1. GIS开发工程师岗位职责、技术要求和常见面试题 2. GIS数据工程师岗位职责、技术要求和常见面试题 3. GIS后端工程师岗位职责、技术要求和常见面试题 4. GIS前端工程师岗位职责、技术要求和常见面试题 5. GIS工程师岗位职责、技术要求和常见面试…

Docker数据卷和Dockerfile

1、什么是Docker数据卷 前言&#xff1a; 在下载的镜像中&#xff0c;我们不能够去改变它内部的一些配置&#xff0c;因为docker的镜像文件是已经配置好的&#xff0c;无法改变&#xff0c;我们只能改变镜像启动后的容器里面的内容&#xff0c;但是又因为&#xff0c;容器本来…

Windows .NET8 实现 远程一键部署,几秒完成发布,提高效率 - CICD

1. 前言 场景 &#xff08;工作环境 一键部署 到 远端服务器 [阿里云]&#xff09; CICD 基本步骤回顾 https://blog.csdn.net/CsethCRM/article/details/141604638 2. 环境准备 服务器端IP&#xff1a;106.15.74.25&#xff08;阿里云服务器&#xff09; 客户端&#xff1…

STM32学习笔记4 --- USART

目录 通信接口1 USART 串口的通信协议 硬件部分&#xff1a; 软件部分&#xff1a; 字节数据的传递&#xff1a; stm32内部的USART外设 串口发送 串口发送接收 Hex数据包 文本数据包 数据包的收发流程 串口收发Hex数据包 串口收发文本数据包 通信接口1 USART US…

Java+Selenium+ChromeDriver谷歌版环境搭建

1、创建测试项目 创建一个Maven项目即可 2、添加Selenium依赖 最好使用Selenium3版本 3、下载对应版本的ChromeDriver 找到自己浏览器对应的版本 下载ChromeDriver&#xff08;114版本以后的&#xff0c;114版之前的直接到官网下载&#xff09;下载地址 将下载好的驱动…

Nacos注册中心与OpenFeign远程调用

文章目录 一、注册中心原理二、Nacos注册中心三、服务注册四、服务发现五、OpenFeign 一、注册中心原理 在微服务当中必须有两个角色 服务提供者&#xff1a;提供接口供其它微服务访问 服务消费者&#xff1a;调用其它微服务提供的接口 在大型微服务项目中&#xff0c;服务提供…

探索EasyCVR与AI技术深度融合:视频汇聚平台的新增长点

随着5G、AI、边缘计算、物联网&#xff08;IoT&#xff09;、云计算等技术的快速发展&#xff0c;万物互联已经从概念逐渐转变为现实&#xff0c;AIoT&#xff08;物联网人工智能&#xff09;的新时代正在加速到来。在这一背景下&#xff0c;视频技术作为信息传输和交互的重要手…

【免费分享】GIS开发面试题(流程+自我介绍+基础篇+Openlayermapbox)

本篇文章针对GIS应届生就业方向及面试困惑问题进行了收集整理&#xff0c;并列出了关于GIS开发面试中常见的问题&#xff08;含答案&#xff09;。 “ 包括以下内容 前言 简介 面试之前 面试流程 自我介绍-AI 基础篇 1、GIS八股文基础篇 2、Openlayers图形绘制 3、倾…

注解实现json序列化的时候自动进行数据脱敏

最近在进行开发的时候遇到一个问题&#xff0c;需要对用户信息进行脱敏处理&#xff0c;原有的方式是写一个util类&#xff0c;在需要脱敏的字段查出数据后&#xff0c;显示掉用方法处理后再set回去&#xff0c;觉得这种方式能实现功能&#xff0c;但是不是特别优雅&#xff0c…

PostgreSQL + PostGIS:空间数据存储及管理解决方案

在数据库领域&#xff0c;PostgreSQL 已成为最强大、最通用的选项之一。它管理大量数据的能力、对 SQL 标准的遵守以及可扩展的架构使其受到学术界和工业界的喜爱。然而&#xff0c;真正让 PostgreSQL 脱颖而出的原因之一是它与PostGIS的集成&#xff0c;这是一个允许您有效处理…

HTML 基础,尚优选网站设计开发(二)

最近在恶补HTML相关知识点&#xff0c;本人是后端程序员&#xff0c;看到周围很多人都被裁员了&#xff0c;突然想尽早转变成全栈程序员变成独立开发者&#xff0c;有空余接接私单、商单的 尚优选网站设计开发&#xff0c;HTMLCSSJavaScript实际使用 尚优选网站设计开发页面分析…

单元测试 Mock不Mock?

文章目录 前言单元测试没必要?Mock不Mock?什么是Mock?Mock的意义何在? 如何Mock&#xff1f;应该Mock什么&#xff1f;Mock 编写示例 总结 前言 前段时间&#xff0c;我们团队就单元测试是否采用 Mock 进行了一番交流&#xff0c;各有各的说法。本文就单元测试 Mock不Mock…

流媒体技术革新,EasyCVR视频汇聚平台赋能视频监控全面升级

随着科技的飞速发展&#xff0c;流媒体技术和视频监控正经历着前所未有的变革与融合。本文将从流媒体技术的新兴趋势出发&#xff0c;探讨其与视频监控领域的深度结合&#xff0c;以及这一融合所带来的创新与发展。 一、流媒体技术的新兴趋势 1、5G网络的广泛应用 5G网络以其…