day44:C++ day4,拷贝赋值、友元、常成员、运算符重载

一、仿照string类,完成myString 类

mystring.h

#ifndef MYSTRING_H
#define MYSTRING_H#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,"");         //赋值为空串cout<<"无参构造"<<endl;}//有参构造myString(const char *s)          //string  s("hello world"){size = strlen(s);str = new char[size+1];strcpy(str, s);cout<<"有参构造"<<endl;}//拷贝构造myString(const myString &other){str=new char[other.size];strcpy(str,other.str);this->size=other.size;cout<<"拷贝构造"<<endl;}//析构函数~myString(){delete []str;cout<<"析构函数"<<endl;}//拷贝赋值函数myString &operator=(const myString &other);//判空函数bool string_empty()const;//size函数int string_size()const;//c_str函数const char* c_str()const;//at函数char &at(int pos);//加号运算符重载myString operator+(const myString &other)const;//加等于运算符重载myString operator+=(const myString &other);//关系运算符重载(>)bool operator>(const myString &other)const;//中括号运算符重载char operator[](int index)const;
};#endif // MYSTRING_H

mystring.cpp:

#include "mystring.h"//拷贝赋值函数
myString &myString::operator=(const myString &other)
{if(this!=&other){if(str!=NULL){delete []str;}str=new char[other.size];strcpy(str,other.str);this->size=other.size;}return *this;
}
//判空函数
bool myString::string_empty()const
{return strcmp(str,"")==0;
}
//size函数
int myString::string_size()const
{return size;
}
//c_str函数
const char* myString::c_str()const
{return str;
}
//at函数
char &myString::at(int pos)
{while(1){if(pos<0||pos>=size){cout<<"输入格式不对,范围为0~"<<size<<endl;}else{break;}}return *(str+pos);
}
//加号运算符重载
myString myString::operator+(const myString &other)const
{myString a=*this;char buf[a.size];strcpy(buf,a.str);if(a.str!=NULL){delete []a.str;}a.size=a.size+other.size;a.str=new char[a.size+1];strcpy(a.str,buf);strcat(a.str,other.str);return a;
}
//加等于运算符重载
myString myString::operator+=(const myString &other)
{char buf[size];strcpy(buf,str);if(str!=NULL){delete []str;}size=size+other.size;str=new char[size];strcpy(str,buf);strcat(str,other.str);return *this;
}
//关系运算符重载(>)
bool myString::operator>(const myString &other)const
{return strcmp(str,other.str)>0;
}
//中括号运算符重载
char myString::operator[](int index)const
{while(1){if(index<0||index>=size){cout<<"输入格式不对,范围为0~"<<size<<endl;}else{break;}}return *(str+index);
}

main.cpp:

#include "mystring.h"int main()
{myString a("hello world");cout<<"字符串a为 "<<a.c_str()<<endl;cout<<"字符串大小为"<<a.string_size()<<endl;a.at(0)='H';cout<<"字符串a为 "<<a.c_str()<<endl;myString b;cout<<"字符串b为空?"<<b.string_empty()<<endl;b=a;cout<<"字符串b为 "<<b.c_str()<<endl;myString c=a+b;cout<<"字符串c为 "<<c.c_str()<<endl;myString d("hahaha");d+=a;cout<<"字符串d为 "<<d.c_str()<<endl;cout<<"字符串d比a大? "<<d.operator>(a)<<endl;return 0;
}

运行结果:

二、思维导图:day3补充: 有道云笔记 day4:有道云笔记

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

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

相关文章

北大C++课后记录:文件读写的I/O流

前言 文件和平常用到的cin、cout流其实是一回事&#xff0c;可以将文件看作一个有限字符构成的顺序字符流&#xff0c;基于此&#xff0c;也可以像cin、cout读键盘数据那样对文件进行读写。 读写指针 输入流的read指针 输出流的write指针 注&#xff1a;这里的指针并不是普…

使用scp命令失败出错

使用scp命令失败出错&#xff0c;无反应。 解决&#xff1a; 1.使用ifconfig查看目标主机公网IP地址 ifconfig需使用公网ip 2.配置免密登录 可参考 远程登录ssh ssh-copy-id root目标主机ip再次尝试scp命令。 SCP&#xff08;Secure Copy&#xff09;是一个用于在本地主机和…

uni-app:通过ECharts实现数据可视化-如何引入项目

效果 引入文件位置 代码 <template><view id"myChart"></view> </template> <script> import echarts from /static/js/echarts.js // 引入文件 export default {mounted() {// 初始化EChartsconst myChart echarts.init(document…

RabbitMQ消息可靠性(一)-- 生产者消息确认

前言 在项目中&#xff0c;引入了RabbitMQ这一中间件&#xff0c;必然也需要在业务中增加对数据安全性的一层考虑&#xff0c;来保证RabbitMQ消息的可靠性&#xff0c;否则一个个消息丢失可能导致整个业务的数据出现不一致等问题&#xff0c;对系统带来巨大的影响&#xff0c;…

发现某设备 adb shell ps 没有输出完整信息

某错误示例 并不是都使用 -ef 参数查找都能够返回完整信息&#xff0c;某些版本设备不适用 -ef 也不会返回完整信息。 简单兼容 简单兼容不同版本 Android 设备查找进程列表&#xff0c;没有通过脚本判断 Android 版本&#xff0c;如有兴趣可以自己修改。 :loop adb shell…

使用docker创建minio镜像并上传文件,提供demo

使用docker创建minio镜像并上传文件&#xff0c;提供demo 1. 整体描述2. 环境搭建2.1 windows环境搭建2.2 docker部署 3. spring集成3.1 添加依赖3.2 配置文件3.3 创建config类3.4 创建minio操作类3.5 创建启动类3.6 测试controller 4. 测试操作4.1 demo运行4.2 页面查看4.3 上…

普中51-数码管实验

文章目录 数码管实验**静态数码管实验**动态数码管实验多位数码管简介数码管动态显示原理74HC245 和74HC138芯片介绍74HC245 芯片简介74HC138 芯片简介 代码如下&#xff1a; 数码管实验 如图所示&#xff1a; 从上图可看出&#xff0c;一位数码管的引脚是 10 个&#xff0c;…

c++11的一些新特性

c11 1. {}初始化2. 范围for循环3. final与override4. 右值引用4.1 左值引用和右值引用4.2 左值引用与右值引用比较 5. lambda表达式6. 声明6.1 auto6.2 decltype6.3 nullptr 7. 可变参数模版 1. {}初始化 在C中&#xff0c;使用花括号初始化的方式被称为列表初始化。列表初始化…

C++:初始化列表,static成员,友元,内部类

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》 文章目录 前言一、初始化列表二、static成员三、友元四、内部类总结 前言 本篇博客作为C&#xff1a;初始化列表&#xff0c;static成员&#xff0c;友元&#xff0c;内部类的知识总结。 一…

java面向对象(二)

文章目录 一、方法1.例子2.例子3.例子 二、使用步骤1.举例说明类跟对象&#xff08;高大上&#xff09;2.理解“万事万物皆对象”3.变量在内存中的位置体现4.引用类型的变量5.匿名对象的使用 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、方法 描…

Mysql开启binlog

本案例基于mysql5.7.16实验 1、在linux中进入mysql查询binlog是否打开&#xff0c;执行命令如下&#xff1a; mysql -u root -p 2、查询binlog是否开启命令如下&#xff0c;如果log_bin为OFF则证明mysql的binlog没有打开 show variables like %log_bin%; 3、退出mysql终端&…

基于 Alpine 环境构建 aspnetcore6-runtime 的 Docker 镜像

关于 Alpine Linux 此处就不再过多讲述&#xff0c;请自行查看相关文档。 .NET 支持的体系结构 下表列出了当前支持的 .NET 体系结构以及支持它们的 Alpine 版本。 这些版本在 .NET 到达支持终止日期或 Alpine 的体系结构受支持之前仍受支持。请注意&#xff0c;Microsoft 仅正…