C++第四讲

这篇具有很好参考价值的文章主要介绍了C++第四讲。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

思维导图

C++第四讲,c++,开发语言文章来源地址https://www.toymoban.com/news/detail-594682.html

 仿照string类,实现myString类

/* 
   ---------------------------------
    @author:YoungZorn
    created on 2023/7/19 19:20.
   ---------------------------------
*/
#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,"");         //初始化myString对象str为空串
    }
    //有参构造
    myString(const char *s)          //string  s("hello world")
    {
        size = strlen(s);
        str = new char[size+1];   //末尾添加 '\0'
        strcpy(str, s);   //--->str = "hello world"
    }

    //拷贝构造
    myString(const myString & other):str(new char(*other.str)),size(other.size){}

    //析构函数
    ~myString(){delete str;}

    //拷贝赋值函数
    myString& operator=(const myString& other){
        if(this != &other){
            delete str;  //释放原有的内存
            this->size = other.size;
            this->str = new char(*(other.str));
        }
        return *this;
    }

    //判空函数
    bool isEmpty(){
        if(strcmp(str,"") == 0){
            return true;
        }
        return false;
    }

    //size函数
    int strSize(){
        if (isEmpty()){
            return -1;
        }
        return strlen(str);
    }

    //c_str函数
    const char *str_c_str()const{
        return str;   //返回一个C风格的字符串
    }

    //at函数
    char &at(int pos){
        if (isEmpty()){
            const int &ref = -1;
            return (char &)ref;
        }
        return str[pos];   //返回字符串下标的字符
    }

    //加号运算符重载  (+)
    const myString operator+ (const myString & R) const{
        int newSize = size + R.size;  //新字符串的长度
        char *newStr = new char[newSize+1];  //分配新字符串内存
        strcpy(newStr, this->str);
        strcat(newStr,R.str);
        return myString(newStr);
    }

    //加等于运算符重载 (+=)
    const myString operator+= (const myString & R){
        size += R.size;  //更新size
        strcat(this->str,R.str);  //将R.str追加到str上
        return myString(this->str);
    }

    //关系运算符重载 (>)
    bool operator> (const myString & R) const {
        int flag = strcmp(this->str,R.str);
        if (flag > 0)
            return true;
        return false;
    }
};

int main(){
    myString string1 = "hello";
    bool flag = string1.isEmpty();
    cout<<flag<<endl;

    cout<<string1.strSize()<<endl;

    cout<<"at[0]:"<<string1.at(0)<<endl;

    myString s1 = "qwe";
    myString s2 = "asd";

    cout<<(s1>s2)<<endl; //判断 s1 和 s2 的大小

    s1 += s2;
    cout<<"s1 += s2 = "<<s1.str_c_str()<<endl;  // +=
    cout<<s1.str_c_str()<<endl;

    myString s3 = "aaa";
    myString s4 = "bbb";

    myString s5 = s3 + s4;
    cout<<"s3 + s4 = "<<s5.str_c_str()<< endl;  // +

    return 0;
}

到了这里,关于C++第四讲的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【AWS系列】第四讲:什么是 AWS Serverless

    目录 序言:  1 概念介绍 AWS Serverless  2 组成介绍 2.1 计算 2.1.1  AWS Lambda 2.1.2 AWS Fargate 2.2 应用程序集成 2.2.1  Amazon EventBridge  2.2.2 AWS Step Functions 2.2.3 Amazon Simple Queue Service 2.3.4 Amazon API Gateway 2.3 数据存储 2.3.1 Amazon S3  2.3.2 Amazon DynamoDB 最近需要学习使用到AWS一些内容,整

    2023年04月09日
    浏览(27)
  • 60题学会动态规划系列:动态规划算法第四讲

    买卖股票相关的动态规划题目 文章目录 1. 买卖股票的最佳时机含冷冻期 2. 买卖股票的最佳时期含⼿续费 3. 买卖股票的最佳时机III 4. 买卖股票的最佳时机IV 力扣链接:力扣 给定一个整数数组 prices ,其中第    prices[i]  表示第  i  天的股票价格 。​ 设计一个算法计算出最

    2024年02月13日
    浏览(26)
  • 【数据结构第四讲(排序算法)】我不信教不会你

    大家好啊✨ 先简单介绍一下自己💎 本人目前大二在读,专业是计算机科学与技术。 写博客的目的是督促自己记好每一章节的笔记,同时也希望结交更多同仁,大家互相监督,一起进步!☀️ 👀在这篇博客中,将会进行七种( 直接插入排序,希尔排序,选择排序,堆排序,

    2024年02月11日
    浏览(31)
  • ElasticSearch第四讲:ES详解:ElasticSearch和Kibana安装

    本文是ElasticSearch第四讲:ElasticSearch和Kibana安装,主要介绍ElasticSearch和Kibana的安装。了解完ElasticSearch基础和Elastic Stack生态后,我们便可以开始学习使用ElastiSearch了。 安装ElasticSearch还是先要看下官方网站。 官方网站 官方2.x中文教程中安装教程 官方ElasticSearch下载地址 官方

    2024年02月08日
    浏览(32)
  • 自学SLAM(8)《第四讲:相机模型与非线性优化》作业

    小编研究生的研究方向是视觉SLAM,目前在自学,本篇文章为初学高翔老师课的第四次作业。 现实⽣活中的图像总存在畸变。原则上来说,针孔透视相机应该将三维世界中的直线投影成直线,但是当我们使⽤⼴⾓和鱼眼镜头时,由于畸变的原因,直线在图像⾥看起来是扭曲的

    2024年02月05日
    浏览(33)
  • K8S第四讲 Kubernetes删除pod阻塞问题

    在Kubernetes中,当您尝试删除一个Pod时,可能会遇到Pod一直阻塞的情况。这通常是由于Pod正在运行或被其他资源(例如ReplicaSet或Deployment)控制而导致的。以下是一些可能的解决方案: 1: 确认Pod是否正在运行:在执行删除Pod命令之前,请先检查Pod的状态,确保它没有在运行中

    2024年02月05日
    浏览(45)
  • 第四讲—讲解GPIO_Write函数以及相关例程

    之前讲解了初学GPIO的几个函数,下面介绍又一个函数,此函数对所有端口进行操作 GPIO_Write函数,与上一篇里边讲解的其他函数相比,最大的特点是它可以对多个端口进行赋值操作。 先看函数定义: 第一个参数与之前一样,因为是对多个端口操作,我们以GPIOA的所有端口为例

    2024年02月16日
    浏览(26)
  • 分布式系统第四讲:分布式锁及实现方案

    本文主要介绍分布式锁的概念和分布式锁的设计原则,以及常见的分布式锁的实现方式。

    2024年02月12日
    浏览(78)
  • 【Vue3 知识第四讲】数据双向绑定、事件绑定、事件修饰符详解

    什么是数据双向绑定? 当数据发生变化的时候,视图会相应的发生变化 当视图发生改变的时候,数据也会相应的同步变化 数字化管理平台 Vue3+Vite+VueRouter+Pinia+Axios+ElementPlus 权限系统-商城 个人博客地址 双向绑定的指令 ​ v-model 指令实现数据双向绑定 双向绑定使用场景 ​

    2024年02月09日
    浏览(58)
  • 【数学建模】《实战数学建模:例题与讲解》第四讲-插值与拟合(含Matlab代码)

    如果这篇文章对你有帮助,欢迎点赞与收藏~ 在实际问题中,对于给定的函数 y = f(x) ,通常通过实验观测在某个区间 [a, b] 上一系列点 x_i 上的函数值 y_i = f(x_i) 得到。当需要在这些观测点 x_0, x_1, ..., x_n 之间的某些点 x 上估计函数值时,插值法和拟合是两种常用的数学方法。

    2024年02月05日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包