c++ 类中特殊成员函数

作业:

仿照string类,自己手动实现 My_string,分文件编译

fun.h代码

#ifndef FUN_H
#define FUN_H#include <iostream>using namespace std;class My_string {
private:char *ptr;  // 指向字符数组的指针int size;   // 字符串的最大容量int len;    // 字符串当前长度void expand();  // 扩容函数public:// 无参构造My_string();// 有参构造My_string(const char* src);My_string(int num, char value);// 拷贝构造My_string(const My_string& other);// 拷贝赋值My_string& operator=(const My_string& other);// 析构函数~My_string();// 判空bool empty();// 尾插void push_back(char value);// 尾删void pop_back();// at函数实现char &at(int index);// 清空函数void clear();// 返回C风格字符串char *data();// 返回实际长度int get_length();// 返回当前最大容量int get_size();
};#endif // FUN_H

fun.cpp代码

#include "fun.h"#include <cstring>// 无参构造
My_string::My_string():size(15)
{this->ptr = new char[size];this->ptr[0] = '\0';            //表示串为空串this->len = 0;
}// 有参构造
My_string::My_string(const char* src)
{len = strlen(src);size = len + 1;ptr = new char[size];strcpy(ptr, src);
}My_string::My_string(int num, char value) : size(num + 1), len(num)
{ptr = new char[size];memset(ptr, value, num);ptr[num] = '\0';
}// 拷贝构造
My_string::My_string(const My_string& other) : size(other.size), len(other.len)
{ptr = new char[size];strcpy(ptr, other.ptr);
}// 拷贝赋值
My_string& My_string::operator=(const My_string& other)
{if (this != &other){delete[] ptr;size = other.size;len = other.len;ptr = new char[size];std::strcpy(ptr, other.ptr);}return *this;
}// 析构函数
My_string::~My_string(){delete[] ptr;
}// 判空
bool My_string::empty(){return len == 0;
}// 尾插
void My_string::push_back(char value){if (len + 1 >= size) {expand();}ptr[len++] = value;ptr[len] = '\0';
}// 尾删
void My_string::pop_back(){if (len > 0) {ptr[--len] = '\0';}
}// at函数实现
char& My_string::at(int index){if (index < 0 || index >= len){cout << "Index out of range" << endl;}return ptr[index];
}// 清空函数
void My_string::clear(){len = 0;ptr[0] = '\0';
}// 返回C风格字符串
char* My_string::data(){return ptr;
}// 返回实际长度
int My_string::get_length(){return len;
}// 返回当前最大容量
int My_string::get_size(){return size;
}// 扩容函数
void My_string::expand() {size *= 2;char* new_ptr = new char[size];strcpy(new_ptr, ptr);delete[] ptr;ptr = new_ptr;
}

main.cpp代码

#include <iostream>
#include "fun.h"int main() {My_string s1;cout << "Size = " << s1.get_size() << endl;s1.push_back('h');s1.push_back('e');s1.push_back('l');s1.push_back('l');s1.push_back('o');cout << "s1 = " << s1.data() << endl;cout << "Length = " << s1.get_length() << endl;cout << "Size = " << s1.get_size() << endl;s1.pop_back();cout << "s1 = " << s1.data() << endl;My_string s2(5,'A');cout << "s2 = " << s2.data() << endl;My_string s3("hello");cout << "s3 = " << s3.at(1) << endl;My_string s4 = s2;cout << "s4 = " << s4.data() << endl;s1 = s3;cout << "s1 = " << s1.data() << endl;s1.clear();cout<<"empty = "<<s1.empty()<<endl;for(int i=0;i<30;i++){s1.push_back('a');cout<<s1.get_size()<<endl;}return 0;
}

运行结果:

知识梳理:

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业设计推荐-基于python的游戏资讯分享平台

精彩专栏推荐订阅&#xff1a;在下方主页&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、基于python的…

2024重生之回溯数据结构与算法系列学习(4)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】

目录 数据结构王道第2.3章节之线性表精题汇总一 &#xff08;10&#xff09;题目:​编辑 解题思路&#xff1a; 实现代码&#xff1a; &#xff08;11&#xff09;题目&#xff1a; 解题思路&#xff1a; &#xff08;12&#xff09;题目&#xff1a; 解题思路&#xff1a; 实…

Set 和 Map 的模拟实现

1、引言 在数据结构与算法的学习与实践中&#xff0c;关联容器&#xff08;associative containers&#xff09;是不可忽视的重要工具。作为高效管理数据的一类容器&#xff0c;C 标准库中的 set 和 map 在现代软件开发中扮演着关键角色。这两个容器通过平衡二叉搜索树&#x…

软件测试常见面试题

目录 1、什么是测试用例? 2、什么是BUG?(BUG的生命周期) 3、软件开发五大模型 4、软件测试的生命周期 5、测试模型(V模型、W模型) 6、软件开发的生命周期 7、如何描述一个BUG? 8、BUG的级别(线上出现崩溃级别的BUG怎么办) 9、 BUG的生命周期 10、发现一个BUG…

Qt系统相关——QFile和QFileInfo

文章目录 文件操作QFile使用示例QFileInfo 文件操作 C语言&#xff1a; fopen打开文件fread、fwrite读写文件fclose关闭文件 C&#xff1a; fstream打开文件<<、>>流式操作符读写 Linux&#xff1a; open打开文件read、write读写文件close关闭文件 Qt自己也…

把任务管理器里面的vmware usb arbitrition停了,虚拟机一直识别不到手机设备了

在设备管理器--服务 里面找到VMware usb arbitrition服务&#xff0c;点击“启用”就好了。 参考大佬的文章&#xff1a; 吐血经验&#xff01;&#xff01;&#xff01;解决虚拟机连不上USB&#xff01;最全&#xff01;_为什么vmware虚拟机不能连接上usb设备-CSDN博客

地平线静态目标检测 MapTR 参考算法-V1.0

简介 高清地图是自动驾驶系统的重要组件&#xff0c;提供精确的驾驶环境信息和道路语义信息。传统离线地图构建方法成本高&#xff0c;维护复杂&#xff0c;使得依赖车载传感器的实时感知建图成为新趋势。早期实时建图方法存在局限性&#xff0c;如处理复杂地图元素的能力不足…

品牌互鉴,融通中外|AORO遨游创始人受邀参加2024北京国际品牌周

2024年9月21日&#xff0c;第三届北京国际品牌周在北京金融街英蓝国际金融中心举办&#xff0c;本次盛会以“品牌互鉴&#xff0c;融通中外”为主题&#xff0c;由中国国际商会、中国国际公共关系协会、中国文化管理协会、北京国际设计周主办&#xff0c;中国外文局文化传播中心…

LSM-YOLO: A Compact and Effective ROI Detector for Medical Detection

LSM-YOLO: A Compact and Effective ROI Detector for Medical Detection LSM-YOLO: 一种紧凑且有效的医学检测ROI检测器1.介绍2.相关工作2.1医学感兴趣区域&#xff08;ROI&#xff09;检测2.2多尺度特征用于对象检测 3方法3.1LAE(轻量级自适应提取&#xff09;3.2MSFM(多路径…

GESP等级考试C++二级-switch...case的用法

在《GESP等级考试C二级if语句》中提到&#xff0c;可以使用if...else if...else语句来处理多种可能的情况。在C中&#xff0c;使用switch...case语句也可以来处理多种可能。 1 switch...case语句的格式 switch...case语句的格式如图1所示。 图1 switch...case语句的格式 其中…

鸿蒙开发(NEXT/API 12)【基础功能(使用剪贴板进行复制粘贴)】剪贴板服务

场景介绍 [剪贴板]为开发者提供数据的复制粘贴能力。 当需要使用复制粘贴等功能时&#xff0c;例如&#xff1a;复制文字内容到备忘录中粘贴&#xff0c;复制图库照片到文件管理粘贴&#xff0c;就可以通过剪贴板来完成。 约束限制 剪贴板内容大小<128MB。为保证剪贴板数…

【TabBar嵌套Navigation案例-产品推荐页面-UICollectionView-结合xib使用 Objective-C语言】

一、接下来,我们来说这个产品推荐页面 1.首先呢,它是一个CollectionViewController,当我点击这个产品推荐的时候, 这个Cell的时候,我要跳到一个CollectionViewController, 所以呢,我们需要先找到产品推荐,然后给它去添加一个targetVC,然后给它push到一个产品推荐的页面…

AI大模型的前十岗位薪资,谁还说读书没用?零基础入门到精通,收藏这一篇就够了

1. AI系统架构师 薪资范围&#xff1a;100万 - 200万/年 职位要求&#xff1a;需要具备全面的技术背景&#xff0c;精通系统架构设计&#xff0c;能够有效整合AI技术&#xff0c;提升系统性能。要求硕士及以上学历&#xff0c;计算机科学或相关专业背景。 目标院校&#xff1…

使用Conda配置python环境到Pycharm------Window小白版

使用Conda配置python环境到Pycharm 一、Conda安装和环境配置1.1 安装Conda软件1.2 判断是否安装成功1.3 创建Conda虚拟环境 二、 pycharm的安装2.1 Pycharm使用手册2.2 安装pycharm 三、 pycharm导入Conda环境 一、Conda安装和环境配置 anaconda官网 1.1 安装Conda软件 运行…

如何装修阿里巴巴国内1688平台淡入淡出效果首页特效1688店铺装修模板旺铺装修阿里店铺首页怎么装修全阿里

1688运营1688批发首页1688装修模板1688店铺怎么装修模板自定义装修代码1688店铺装修模板旺铺装修阿里店铺首页怎么装修1688店铺装修教程视频全屏通栏代码1688店铺装修模板阿里巴巴店铺装修设计 如何装修阿里巴巴国内1688平台淡入淡出效果首页特效1688店铺装修模板旺铺装修阿里店…

Actions Speak Louder than Words Meta史诗级的端到端推荐大模型落地

发现好久之前整理的推荐系统被遗忘在了草稿箱&#xff0c;让它出来见见世面。。。后续空了持续更新 1.Background 大模型生成用于推荐场景有如下几个难点&#xff1a; 特征缺乏显式结构。存在sparse和dense特征&#xff0c;其中sparse特征指的是一些离散特征&#xff0c;这部…

不再错过任何一个区块!用Node.js + WebSocket轻松实现区块链实时监控

文章目录 前言一、WebSocket是什么&#xff1f;二、项目结构三、代码实现1. 后端实现2. 前端实现 四、启动项目总结 前言 随着区块链技术的发展&#xff0c;实时监控区块链网络中的区块和交易信息变得越来越重要。无论是开发去中心化应用&#xff08;DApp&#xff09;&#xf…

shell脚本(2)

作业&#xff1a; 1.统计家目录下.c文件个数 #!/bin/bash num0 for file in ls ~/*.c do((num)) done echo "家目录中.c文件数:$num" 2定义一个稀疏数组&#xff08;下标不连续&#xff09;&#xff0c;写一个函数求稀疏数组中的和&#xff0c;要求稀疏数组中的数…

p18 docker镜像原理之联合文件系统,p19 docker镜像分层的理解

镜像是什么 镜像其实就是一种轻量级的&#xff0c;可执行的一种软件包&#xff0c;用来打包基于环境开发的软件&#xff0c;里面可以包括代码&#xff0c;环境&#xff0c;数据库&#xff0c;配置文件等信息 如何得到镜像&#xff1f; 可以从镜像仓库下载比方说dockerhub 比…

10种数据库技术的发展历程与现状

数据库是互联网的基石&#xff0c;存储着海量信息&#xff0c;使信息可被高效地组织、检索和分享。没有数据库&#xff0c;网站无法记忆用户数据&#xff0c;应用无法提供个性化服务&#xff0c;信息交流将失去智能与连贯性。因此&#xff0c;数据库技术极大地推动了互联网的发…