C++ --- Day03 重载

自己封装类似C++中的string类

Mystring.h

#ifndef MYSTRING_H
#define MYSTRING_H
#include <iostream>
#include<string.h>
using namespace std;class myString
{friend ostream& operator<<(ostream &cout,const myString &s);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);str = new char[size+1];strcpy(str, s);}//拷贝构造myString(const myString &s);//析构函数~myString();//拷贝赋值函数myString& operator=(const myString &s);//判空函数bool empty()const;//size函数int strsize() const;//c_str函数const char* c_str() const;//at函数char &at(int pos) const;//加号运算符重载const myString operator+(const myString &rstr) const;//加等于运算符重载myString& operator+=(const myString &rstr);//关系运算符重载(>)bool operator>(const myString &rstr) const;//中括号运算符重载char& operator[](const int pos) const;};
void emp(const myString &s);
#endif // MYSTRING_H

Mystring.cpp

#include"Mystring.h"
void emp(const myString &s)
{if(s.empty())cout<<"为空"<<endl;elsecout<<"不为空"<<endl;
}
//<<重载
ostream& operator<<(ostream &cout,const myString &s)
{cout << s.str;return cout;
}//拷贝构造
myString::myString(const myString &s):str(new char(s.size)),size(s.size)
{for(int i = 0;i<s.size;i++){*(this->str+i) = *(s.str + i);}}
//析构函数
myString::~myString()
{if(str != nullptr)delete str;cout<< "析构函数"<<endl;
}
//拷贝赋值函数
myString& myString::operator=(const myString &s)
{if(this->str!=nullptr)delete this->str;this->str = new char (s.size);for(int i = 0;i<s.size;i++){*(this->str+i) = *(s.str+i);}this->size = s.size;return *this;}
//判空函数
bool myString::empty()const
{if(strlen(this->str) == 0)return true;return  false;
}
//size函数
int myString::strsize() const
{return strlen(this->str);
}
//c_str函数
const char* myString::c_str() const
{return this->str;
}
//at函数
char& myString::at(int pos) const
{if(pos<0 || pos > size)throw myString("越界!");return *(this->str+pos);
}
//加号运算符重载
const myString myString::operator+(const myString &rstr) const
{int newsize = this->size+rstr.size;char s[newsize];strcpy(s,this->str);strcat(s,rstr.str);return myString(s);
}
//加等于运算符重载
myString& myString::operator+=(const myString &rstr)
{char *p = this->str;int psize = this->size;this->str = nullptr;this->str = new char (psize+rstr.size);strcpy(this->str,p);delete p;strcat(this->str,rstr.str);return *this;
}
//关系运算符重载(>)
bool myString::operator>(const myString &rstr) const
{if(strcmp(this->str,rstr.str)>0)return true;return false;
}
//中括号运算符重载
char& myString::operator[](const int pos) const
{if(pos>=0&&pos<size)return *(this->str+pos);throw myString("越界!");
}

main.cpp

#include"Mystring.h"
void emp(const myString &s)
{if(s.empty())cout<<"为空"<<endl;elsecout<<"不为空"<<endl;
}
//<<重载
ostream& operator<<(ostream &cout,const myString &s)
{cout << s.str;return cout;
}//拷贝构造
myString::myString(const myString &s):str(new char[s.size]),size(s.size)
{for(int i = 0;i<s.size;i++){*(this->str+i) = *(s.str + i);}}
//析构函数
myString::~myString()
{if(str != nullptr)delete[] str;cout<< "析构函数"<<endl;
}
//拷贝赋值函数
myString& myString::operator=(const myString &s)
{if(this->str!=nullptr)delete[] this->str;this->str = new char [s.size];for(int i = 0;i<s.size;i++){*(this->str+i) = *(s.str+i);}this->size = s.size;return *this;}
//判空函数
bool myString::empty()const
{if(strlen(this->str) == 0)return true;return  false;
}
//size函数
int myString::strsize() const
{return strlen(this->str);
}
//c_str函数
const char* myString::c_str() const
{return this->str;
}
//at函数
char& myString::at(int pos) const
{if(pos<0 || pos > size)throw myString("越界!");return *(this->str+pos);
}
//加号运算符重载
const myString myString::operator+(const myString &rstr) const
{int newsize = this->size+rstr.size;char s[newsize];strcpy(s,this->str);strcat(s,rstr.str);return myString(s);
}
//加等于运算符重载
myString& myString::operator+=(const myString &rstr)
{char *p = this->str;int psize = this->size;this->str = nullptr;this->str = new char (psize+rstr.size);strcpy(this->str,p);delete[] p;strcat(this->str,rstr.str);return *this;
}
//关系运算符重载(>)
bool myString::operator>(const myString &rstr) const
{if(strcmp(this->str,rstr.str)>0)return true;return false;
}
//中括号运算符重载
char& myString::operator[](const int pos) const
{if(pos>=0&&pos<size)return *(this->str+pos);throw myString("越界!");
}

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

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

相关文章

Flask+pyecharts结合,html统计图呈现在前端页面

是我,是你 在网上看到这样一段话: “很多时候,你必须接受这世界上突如其来的失去。洒了的牛奶,遗失的钱包,走散的爱人,断掉的友情。当你做什么都于事无补的时候,唯一能做的,就是让自己努力好过一点。” <

TCP协议报文,核心特性可靠的原因,超时重传详细介绍

目录 一、TCP协议 二、TCP核心特性的保障 三、保留的六位标志位对于应答报文的作用 四、如何处理丢包——超时重传的原理 五、超时重传的时间 一、TCP协议 每一行是四个字节&#xff0c;前面的20个字节是固定的&#xff08;TCP最短长度&#xff0c;20字节&#xff0c;选项…

PAT (Basic Level) Practice 1045~1066

PTA Basic Level Practice 解题思路和代码&#xff0c;主要用的是 C。每22题一篇博客&#xff0c;可以按目录来进行寻找。 文章目录 1045 快速排序1046 划拳1047 编程团体赛1048 数字加密1049 数列的片段和1050 螺旋矩阵1051 复数乘法1052 卖个萌1053 住房空置率1054 求平均值1…

拷贝构造函数(深拷贝+浅拷贝)

目录 拷贝构造函数浅拷贝深拷贝 拷贝构造函数 拷贝构造函数&#xff1a; Myclass(const Myclass& myclass) {amyclass.a;bmyclass.b;cmyclass.c; }浅拷贝 浅拷贝的思路就是和默认的拷贝构造函数一样: 即将原对象的值直接赋值给新对象&#xff0c;这样做一般情况下是没什…

如何查看服务器各项指标的配置-具体指令-服务器配置参数详解-大模型训练推荐配置单服务器和服务器之间显卡直通叠加扩容

查看服务器配置的指令 要查看服务器的各项组件配置,您可以执行以下步骤: 操作系统信息: 使用命令 uname -a(Linux/Unix)或 systeminfo(Windows)来查看操作系统的版本和内核信息。CPU 信息: 在Linux/Unix系统上,运行 lscpu 命令来查看CPU的详细信息。在Windows系统上,…

Java“牵手”淘宝商品详情数据,淘宝商品详情接口,淘宝API接口申请指南介绍

采集场景 在淘宝首页&#xff08;taobao.com&#xff09;输入关键词搜索&#xff0c;采集搜索后得到的商品列表页数据然后再点击进去即是商品详情页面数据。示例中关键词为【新款连衣裙】&#xff0c;可根据需求进行更换&#xff0c;同时支持自动批量输入多个关键词&#xff0…

解读|美创深度参与5项电信和互联网行业数据安全标准发布实施

《数据安全法》、《个人信息保护法》等法律法规的颁布实施&#xff0c;坚持安全和发展并重的原则&#xff0c;积极应对复杂严峻的安全风险与挑战&#xff0c;加速构建数据安全保障体系&#xff0c;成为电信和互联网行业重要工作。 “安全发展、标准先行”&#xff0c;标准化工作…

力扣 -- 646. 最长数对链

参考代码&#xff1a; class Solution { public:int findLongestChain(vector<vector<int>>& pairs) {int npairs.size();sort(pairs.begin(),pairs.end());vector<int> dp(n,1);int ret1;for(int i1;i<n;i){for(int j0;j<i;j){if(pairs[j][1]<…

声音生成结果比较方法综述——FAD、JSD、NDB多种衡量参数

文章目录 引言正文Generation quality 生成质量FAD距离FAD论文总结FAD代码下载和安装FAD的使用 通过分类准确率衡量实现代码 Generation Deversity生成多样性NDBJSDNDB和JSD的实现代码代码修改和结果理解 NDB和JSD应用到声音生成 总结 引言 之前自己并没有对这方面的内容进行研…

【数据结构-堆】堆

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

异步FIFO设计的仿真与综合技术(2)

概述 本文主体翻译自C. E. Cummings and S. Design, “Simulation and Synthesis Techniques for Asynchronous FIFO Design 一文&#xff0c;添加了笔者的个人理解与注释&#xff0c;文中蓝色部分为笔者注或意译。前文链接&#xff1a;异步FIFO设计的仿真与综合技术&#xff0…

Java集合面试

文章目录 Java集合框架说说有哪些常见的集合&#xff1f;ArrayList和LinkedList的区别&#xff1f;List和Set的区别&#xff1f;HashMap的数据结构&#xff1f;把你了解的所有都讲一讲&#xff1f;数据结构&#xff1a; put流程Hashmap的resize方法的执行过程&#xff1f;get流…

【算法与数据结构】530、LeetCode二叉搜索树的最小绝对差

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;二叉搜索树的性质是左子树的所有节点键值小于中间节点键值&#xff0c;右子树的所有节点键值大于中间节…

招聘寒冬中,Python 程序员如何突出重围?

在当前的就业市场中&#xff0c;许多人都在感叹“招聘寒冬”。 尤其是对于 Python 程序员来说&#xff0c;似乎面临着更大的挑战。 然而&#xff0c;我要说的是&#xff0c;挑战与机遇并存&#xff0c;只要我们能够找准自己的定位&#xff0c;提升自己的技能&#xff0c;Pyth…

运用谷歌浏览器的开发者工具,模拟搜索引擎蜘蛛抓取网页

第一步&#xff1a;按压键盘上的F12键打开开发这工具&#xff0c;并点击右上角三个小黑点 第二步&#xff1a;选择More tools 第三步&#xff1a;选择Network conditions 第四步&#xff1a;找到User agent一列&#xff0c;取消复选框的勾选 第五步&#xff1a;选择谷歌爬虫…

Spring框架中的Resource接口是什么,以及它在加载和访问资源时的关键作用

文章目录 什么是 Resource 接口&#xff1f;使用 Resource 加载资源使用 Resource 访问文件系统资源总结 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&#xff1a;Java框架 ✨文章内…

通过小程序实现微信扫码授权登录,网站接入微信扫码登录功能(永久免费)

需求 网站如果想要实现微信扫码登录其实有很多种方案&#xff0c;常见的方案就是微信开放平台和微信公众号服务号。前者是目前大部分网站并且是微信认可的一种方式&#xff0c;后者是开发者发现服务号具备扫码关注后即可获取用户基本信息的能力后而开发的一种方式。 而这两者…

PhotoShop 基础教程-000

文章目录 前言总目录 前言 主要讲解photoshop基础知识 所有课程来源B站&#xff1a; PS教程 总目录 第1节-PhotoShop基础课程-版本发展 第2节-PhotoShop基础课程-基础操作 第3节-PhotoShop基础课程-PS界面认识 第4节-PhotoShop基础课程-Ps格式 第5节-PhotoShop基础课程-颜色模…

【深入解析spring cloud gateway】08 Reactor 知识扫盲

一、响应式编程概述 1.1 背景知识 为了应对高并发服务器端开发场景&#xff0c;在2009 年&#xff0c;微软提出了一个更优雅地实现异步编程的方式——Reactive Programming&#xff0c;我们称之为响应式编程。随后&#xff0c;Netflix 和LightBend 公司提供了RxJava 和Akka S…

腾讯云centos7.6安装部署备忘

1.Mysql 1.1 安装mysql wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum install mysql-community-server 1.1.1 安装后重启 service mysqld restart 1.1.2 初次安装mysql&#xff0c;root账…