c++类中的特殊函数

news2024/12/26 14:36:36

My_string.cpp

#include <iostream>
#include "my_string.h"
#include <string.h>
 
using namespace std;
 
My_string::My_string():size(15)
{
 
    this->ptr = new char[size] ;
    this->ptr[0]='\0';//串为空串
    this->len = 0;
 
};
My_string::My_string(const My_string&other)
{
    this->len = other.len;
    this->size = other.size;
    this->ptr = new char[this->size];
    strcpy(this->ptr,other.ptr);
    cout<<"调用拷贝构造函数 "<<endl;
}
My_string::My_string(const char *src):size(15)
{
 
    this->ptr = new char[size] ;
    this->len = 0;
    char *temp =this->ptr;
    while(*src!='\0')
    {
        *temp = *src;
        temp++;
        src++;
        this->len++;
    }
    *temp = '\0';
    //cout<<"调用构造函数 "<<endl;
 
}
My_string  & My_string:: operator=(const My_string&other)
{
    if(this!=&other)
    {
 
        this->len = other.len;
        this->size = other.size;
        this->ptr = new char[this->size];
        strcpy(this->ptr,other.ptr);
    }
    cout<<"调用拷贝赋值函数 "<<endl;
    return *this;
}
My_string::My_string(int num ,char value):size(15)
{
    if(num<0)
    {
        num= 0;
    }else if(num>this->size-1){
 
        num = this->size-1;
    }
 
    this->len = 0;
    int i = 0;
    this->ptr = new char[size] ;
    char *temp =this->ptr;
 
    while(i<num)
    {
        *(temp+i) = value;
        i++;
        this->len++;
    }
 
 
}
My_string::~My_string()
{
    delete []ptr;
 
}
void My_string::push_pop()
{
    if(empty())
    {
        return ;
    }
    this->ptr[this->len-1]= '\0';
    this->len--;
}
void My_string::clear()
{
    while(*ptr!='\0')
    {
        push_pop();
    }
}
char* My_string::data(){
    return this->ptr;
}
bool My_string::empty()
{
    return this->ptr==NULL;
}
void My_string::push_back(char value)
{
     this->ptr[this->len] = value;
     this->len++;
}
char &My_string::at(int index)
{
    if(index<0||index>this->size-1||empty())
    {
 
    }
    return this->ptr[index-1];
 
}
int My_string::get_length()
{
    return this->len;
}
int My_string::get_size()
{
    return this->size;
}
void My_string::junzi()
{
 
    char *temp= new char[this->size*2] ;
 
    if(this->size-1<=this->len)
    {
 
        strcpy(temp,this->ptr);
        delete [] this->ptr;//释放原来的指针
        this->ptr = temp;
        this->size *=2;
    }
 
 
}
 

My_string.h

#ifndef MY_STRING_H
#define MY_STRING_H
 
class My_string
{
private:
    char *ptr;
    int size;
    int len;
 
public:
    //无参构造
    My_string();
    //有参构造
    My_string(const char *src);
 
    //5,A
 
    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 push_pop();
    //at函数实现
    char &at(int index);
    //清空函数
    void clear();
    //返回c风格字符串
    char *data();
    //返回实际长度
    int get_length();
    //返回当前最大容量
    int get_size();
 
    //君子函数:容器满时,二倍扩容
    void junzi();
 
};
 
#endif // MY_STRING_H
 

main.cpp

#include <iostream>
#include "my_string.h"
using namespace std;
 
 
int main()
{
    //string s4("AAAAAc") ;
    //s4.length();
    //cout<<"s1.length"<<s4.length()<<endl;
    My_string s0;
    My_string s1("hello");
    s1.clear();
    cout<<"s1. ptr  "<<s1.data()<<endl;
 
 
    cout<<"******************"<<endl;
    My_string s2(5,'A');
    cout<<"s2. ptr  "<<s2.data()<<endl;
 
    s2.push_back('c');
    s2.push_back('h');
    s2.push_back('i');
    s2.push_pop();
    s2.push_pop();
    cout<<"s2. ptr  "<<s2.data()<<endl;
 
    char c =s2.at(6);
    int len = s2.get_length();
    cout<<"char is "<<c<<endl;
    cout<<"len is "<<len<<endl;
    int n = s2.get_size();
    cout<<"n is "<<n<<endl;
 
    cout<<"******************"<<endl;
    My_string s5("world");
    My_string s6=s5;
    My_string s7;
    s7.operator=(s5);
 
 
 
    cout<<"s6.ptr is "<<s6.data()<<endl;
    cout<<"s7.ptr is "<<s7.data()<<endl;
    cout<<"******************"<<endl;
 
 
    My_string s8 ="12321321321321";
    s8.junzi();
 
    cout<<"s8.size = "<<s8.get_size()<<endl;
 
 
    return 0;
}
 

思维导图

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

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

相关文章

Leetcode3289. 数字小镇中的捣蛋鬼

Every day a Leetcode 题目来源&#xff1a;3289. 数字小镇中的捣蛋鬼 解法1&#xff1a;哈希 代码&#xff1a; /** lc appleetcode.cn id3289 langcpp** [3289] 数字小镇中的捣蛋鬼*/// lc codestart class Solution { public:vector<int> getSneakyNumbers(vector…

基于SpringBoot+Vue+MySQL的电影院购票管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着电影产业的蓬勃发展&#xff0c;电影院已成为人们休闲娱乐的重要场所。然而&#xff0c;传统的电影院购票管理系统存在诸多不便&#xff0c;如购票流程繁琐、排队时间长、无法提前选座等问题&#xff0c;给观众的观影体验带…

光控资本:沪指涨0.72%,煤炭、银行板块拉升,车路云概念活跃

23日早盘&#xff0c;沪指盘中强势上扬&#xff0c;深证成指亦走高&#xff0c;场内超3100股飘红。 到午间收盘&#xff0c;沪指涨0.72%报2756.39点&#xff0c;深证成指涨0.58%&#xff0c;创业板指微涨0.09%&#xff0c;上证50指数涨0.73%&#xff1b;两市估计成交3657亿元。…

828华为云征文 | 将Vue项目部署到Flexus云服务器X实例并实现公网访问

一、Flexus云服务器X实例简介 1.1 概述 华为云Flexus X实例是华为云推出的一款创新云服务器产品&#xff0c;它主要面向中小企业和开发者&#xff0c;旨在解决传统云服务中的痛点&#xff0c;提供更加灵活、高效的云服务体验。 华为深刻洞察了中小企业和开发者在云服务应用中遇…

全栈开发(三):springBoot3中使用mybatis-plus

MyBatis-Plus &#x1f680; 为简化开发而生 (baomidou.com) 1.配置pom.xml <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version></dependency&g…

JavaScript --- 字符串常用方法(2)

concat拼接 和号一样 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdev…

基于微信小程序的商品展示+ssm(lw+演示+源码+运行)

商品展示系统 摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;微信小程序被用户普遍使用&#xff0c;为方…

英伟达 Blackwell平台和ASIC芯片升级助力,预计2025年液冷散热渗透率将超20%

TrendForce集邦咨询: 英伟达 Blackwell平台和ASIC芯片升级助力&#xff0c;预计2025年液冷散热渗透率将超20% 根据TrendForce集邦咨询最新调查&#xff0c;随着NVIDIA Blackwell新平台预计于2024年第四季出货&#xff0c;将推动液冷散热方案的渗透率明显增长&#xff0c;从202…

完全无线测量物体电压

无线电压测量的物理原理 所有导电物体都具有一定的电容&#xff0c;我们可以将其分为自电容和相对于其他导体的电容。对于孤立物体&#xff0c;自电容占主导地位&#xff1b;对于导电球体&#xff0c;这是教科书表达式C 4 πεε 0 R&#xff0c;其中ε 0是自由空间的介电常数…

MQ入门(二):java客户端SpringAMQP

目录 1.SpringAMQP 1.1.导入demo工程 1.2.快速入门 1.2.1.消息发送 1.2.2.消息接收 1.2.3.测试 1.3.WorkQueues模型 1.4.交换机类型 1.4.1.Fanout交换机 1.4.2.Direct交换机 1.4.3.Topic交换机 1.5.声明队列和交换机 1.5.1.基于注解声明 1.6.消息转换器 1.6.1.测…

Centos Stream 9根目录扩容

要将 sda 的剩余空间扩展给 cs-root&#xff0c;可以按照以下步骤进行操作。假设你已经有剩余的未分配空间在 sda 上。 步骤 1&#xff1a;查看当前磁盘分区情况 首先&#xff0c;确保你有未分配的空间在 sda 上。 lsblk步骤 2&#xff1a;创建新的分区 使用 fdisk 或 par…

SpringBoot+Aop+注解方式 实现多数据源动态切换

整体思路&#xff1a; 引入基本依赖SpringBootAopMySqlMyBatislombok在配置文件中配置多个数据源创建数据源配置类用于读取配置编写用于标识切换数据源的注解创建数据源切换工具类DataSourceContextHolder编写切面类用于在注解生效处切换数据源编写配置类&#xff0c;加载数据…

在线文档搜索服务测试报告

目录 1. 项目背景: 2. 项目功能: 3. 测试计划: 1. 项目背景: 1.1 在线搜索服务的前端主要一下几个功能, 分别是进入搜索引擎界面(有提示输入关键词信息); 进行输入关键词的界面, 以及显示有关关键词的文档url, 点击跳转至目标文档的界面; 1.2 该在线搜索服务的文档可以实现用…

2024/9/22周报

文章目录 摘要Abstract可能的数据结构数据集结构 数据处理步骤数据集示例人工智能模型应用关键评估目标评价指标分类应用实例最终目标多目标优化的基本概念1. Pareto最优解&#xff08;Pareto Optimality&#xff09;2. 目标权重法&#xff08;Weighted Sum Method&#xff09;…

Python3 爬虫教程 - Web 网页基础

Web网页基础 1&#xff0c;网页的组成HTMLcssJavaScript2&#xff0c;网页的结构 3&#xff0c;节点树及节点间的关系4&#xff0c;选择器开头代表选择 id&#xff0c;其后紧跟 id 的名称。如&#xff1a;div 节点的 id 为 container&#xff0c;那么就可以表示为 #container 1…

Vue3(二)计算属性Computed,监视属性watch,watchEffect,标签的ref属性,propos属性,生命周期,自定义hook

文章目录 一 、计算属性1. 简写2. 完整写法 二、监视watch1. 监视【ref】定义的【基本类型】数据2. 监视【ref】定义的【对象类型】数据3. 监视【reactive】定义的【对象类型】数据4. 监视【ref】或【reactive】定义的【对象类型】数据中的某个属性5. 监视多个数据总结 三、wat…

matlab之数据处理:滑动平均滤波算法与五点三次平滑算法

关注微♥公众号&#xff1a;“电击小子程高兴的MATLAB小屋”获取专属优惠 一.滑动平均滤波算法 算数平均滤波需要多次采样后才能得出一个有效值&#xff0c;如果被检测量变化较快&#xff0c;多次采样后才输出一次有效值&#xff0c;表现就是系统反应迟钝。将当前采样值与之前…

LLM大模型开源微调宝典:LLaMA Factory,汇聚100+国内外实战教程

LLaMA Factory是一个高效、易用、可扩展的开源全栈大模型微调框架&#xff0c;并得到Hugging Face、Avalon Labs、美团等多家国内外企业的关注或落地应用。 本次分享将从大模型高效训练的角度详细剖析LLaMA Factory的构建动机与组成模块&#xff0c;包括上百种大模型的全栈微调…

19_Python中的上下文管理器

Python中的上下文管理器 在Python中&#xff0c;上下文管理器&#xff08;Context Manager&#xff09;是一种用于资源管理的技术&#xff0c;它可以确保资源在使用后被正确释放&#xff0c;例如文件、网络连接或锁。 上下文管理器&#xff08;Context Manager&#xff09;是…

每日一练:二叉树的直径

543. 二叉树的直径 - 力扣&#xff08;LeetCode&#xff09; 一、题目要求 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之…