C++类String的实现代码

2023-11-03

#include<iostream>
using namespace std;
 
class String{
    friend ostream& operator<< (ostream&,String&);
public:
    String(const char* str=NULL);                //赋值构造兼默认构造函数(char)
    String(const String &other);                   //赋值构造函数(String)
    String& operator=(const String&other);         //operator=
    String operator+(const String &other)const;  //operator+
    bool operator==(const String&);              //operator==
    char& operator[](unsigned int);                 //operator[]
    size_t size(){return strlen(m_data);};
    ~String(void) {delete[] m_data;}
private:
    char *m_data;
};
inline String::String(const char* str)
{
    if (!str) m_data=0;
    else
    {
        m_data = new char[strlen(str)+1];
        strcpy(m_data,str);
    }
}
inline String::String(const String& other)
{
    if(!other.m_data) m_data=0;
    else
    {
        m_data=new char[strlen(other.m_data)+1];
        strcpy(m_data,other.m_data);
    }
}
inline String& String::operator=(const String& other)
{
    if (this!=&other)
    {
        delete[] m_data;
        if(!other.m_data) m_data=0;
        else
        {
            m_data = new char[strlen(other.m_data)+1];
            strcpy(m_data,other.m_data);
        }
    }
    return *this;
}
inline String String::operator+(const String &other)const
{
    String newString;
    if(!other.m_data)
        newString = *this;
    else if(!m_data)
        newString = other;
    else
    {
        newString.m_data = new char[strlen(m_data)+strlen(other.m_data)+1];
        strcpy(newString.m_data,m_data);
        strcat(newString.m_data,other.m_data);
    }
    return newString;
}
inline bool String::operator==(const String &s)    
{
    if ( strlen(s.m_data) != strlen(m_data) )
        return false;
    return strcmp(m_data,s.m_data)?false:true;
}
inline char& String::operator[](unsigned int e)
{
    if (e>=0&&e<=strlen(m_data))
        return m_data[e];
}
ostream& operator<<(ostream& os,String& str)
{
    os << str.m_data;
    return os;
}
void main()
{
    String str1="Hello!";
    String str2="Teacher!";
    String str3 = str1+str2;
    cout<<str3<<"\n"<<str3.size()<<endl;
    cin.ignore(100, '\n');
    cin.get();
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++类String的实现代码 的相关文章

  • 为 DocumentDb 设置自定义 json 转换器

    我正在使用类型化 DocumentQuery 从 Azure DocumentDb 集合中读取文档 from f in client CreateDocumentQuery
  • 为什么 std::vector 可以处理类定义中的不完整类型?

    出现了以下问题 C 标准似乎说 std vector需要一个完整的类型才能工作 看https en cppreference com w cpp container vector https en cppreference com w cp
  • 错误:表达式不可赋值三元运算符

    我有以下代码 MPLABX XC8 编译器给出此错误 错误 表达式不可分配 U1ERRIRbits RXFOIF uart1 oerr 1 uart1 oerr 0 这是相关代码部分 typedef union struct bool fe
  • 并行运行多个任务

    我有一个代理列表 每个代理都会访问不同的站点并从站点中提取所需的数据 目前它一次只做一个 但我希望同时运行 10 20 个任务 这样它就可以一次性从 20 个站点下载 而不是只下载一个 这是我目前正在做的事情 private async T
  • 来自 double 的 static_cast 可以优化分配给 double 吗?

    我偶然发现了一个我认为不必要的功能 并且通常让我感到害怕 float coerceToFloat double x volatile float y static cast
  • CMake(Ninja 后端)使用 /MT 编译

    我有一个类似的问题CMake 使用 MT 而不是 MD 进行编译 https stackoverflow com questions 14172856 cmake compile with mt instead of md但有一些差异 我正
  • 从结构调用 C++ 成员函数指针

    我找到了有关调用 C 成员函数指针和调用结构中的指针的信息 但我需要调用结构内部存在的成员函数指针 但我无法获得正确的语法 我在类 MyClass 的方法中有以下代码片段 void MyClass run struct int MyClas
  • 获取列表框中视图中的项目

    我有一个 ListBox 其属性 VirtualizingStackPanel VirtualizationMode 设置为 回收 我正在绑定一个自定义集合 实现IList and IList
  • 维护 VS Test Project 中单元测试方法之间的上下文

    我想按顺序运行以下单元测试 使用随机数字的名称 密码等创建新客户 检索刚刚创建的客户并断言其属性包含相同的随机数 对同一用户调用 ForgotPassword 函数 并使用相同的随机数作为用户名 清楚地看到 我需要生成一次随机数 并在 3
  • 加载 QPixmap 数据的更好方法

    更好的方法来做到这一点 没有QImage QImage image width height QImage Format RGB888 memcpy image bits m frameRGB gt data 0 height width
  • X 轴和 Z 轴上的 Quaternion.Slerp,无 Y 轴

    I am trying to rotate the Player about X Y and Z axis The Y axis should not move from last angle Example if I rotate 45
  • ASP.NET - Crystal Report Viewer 打印按钮在 ASP.NET 中不起作用

    我正在使用 Visual Studio 2008 但我遇到了水晶报告问题 当我单击打印按钮时 它会将我带到弹出窗口 但未找到页面 弹出的网址是 http localhost aspnet client System Web 2 0 5072
  • 使用 STL 流时如何格式化我自己的对象?

    我想将我自己的对象输出到 STL 流 但具有自定义格式 我想出了这样的东西 但由于我之前从未使用过 locale 和 imbue 所以我不知道这是否有意义以及如何实现 MyFacet 和operator 所以我的问题是 这是否有意义以及如何
  • MINIX内部碎片2

    我正在用 C 语言编写一些软件 它递归地列出给定目录中的所有文件 现在我需要计算出内部碎片 我花了很长时间研究这个问题 发现 ext2 上的内部碎片只发生在最后一个块中 我知道理论上你应该能够从索引节点号获得第一个和最后一个块地址 但我不知
  • 将 AutomationID 与 ListView 结合使用

    我正在尝试将 AutomationId 附加到列表视图中的项目 理想情况下 将项目名称绑定到显示的项目
  • 从单应性估计 R/T

    我一直在尝试计算 2 个图像中的特征 然后将这些特征传递回CameraParams R没有运气 特征已成功计算并匹配 但是问题是将它们传递回R t 我明白你必须分解Homography为了使这一点成为可能 我已经使用如下方法完成了 http
  • 使用未命名命名空间而不是静态命名空间

    我可以假设在未命名命名空间中声明的对象相当于static namespace int x 1 static int x 2 FWIK 在这两种情况下 x将具有静态存储期限和内部链接 声明为的对象的所有规则也是如此static适用于未命名名称
  • Windows Phone 的 JSON 反序列化

    我正在尝试反序列化以下 JSON 但我真的不知道如何使用 JSON net 来完成这项工作 我正在使用 C 和 JSON Net 库 我的 JSON 如下 found 3 bounds 43 54919 172 62148 43 54487
  • 异步/等待 - 是*并发*吗?

    我一直在考虑 C 5 中新的异步内容 并且出现了一个特殊问题 据我了解 await关键字是一个简洁的编译器技巧 语法糖来实现连续传递 http en wikipedia org wiki Continuation passing style
  • 如何配置 qt Creator 以显示 C++ 代码而不是反汇编程序?

    昨天我做了很多事情 比如更新 GCC Clang 和重新安装 Qt Creator 今天 在逐步调试我的代码时 调试器显示的是反汇编代码 而不是我编写的 C 代码 紧迫F10 or F11 调试器正在进入汇编代码而不是 cpp nor h我

随机推荐

  • VS开发Linux程序(VisualGDB)

    点击打开链接 VisualGDB是在vs上开发Linux程序的工具 利用visual studio强大的功能调试Linux程序真的是很惬意的一件事情 VisualGDB支持Linux的原理是 通过ssh连接到Linux系统上通过ssh给li
  • shell脚本进阶1——精读ansible+shell脚本

    文章目录 一 脚本规划思路 二 主控机shell脚本 2 1 脚本输出字体特效 2 2 生成菜单栏对话框 2 3 配置本地yum源仓库 2 4 配置受控机yum源 2 5 关闭防火墙和selinux 2 6 把docker安装包给受控机 2
  • MATLAB安装MinGW编译器

    第一步 打开matlab主页里附加功能的获取附加功能 第二步 搜索MinGW 接着选择第一个选项 第三步 点击下载 将下载的文件放在安装matlab的一级文件夹下 打开matlab找到该文件 双击安装 如果你安装成功 恭喜你 但一般都会出现
  • Okhttp关于 java.lang.NoSuchMethodError: okio.BufferedSource报错

    我们可以从报错的内容来下手 NoSuchMethod 就是说okio并没有其中的方法 我找了很久才恍然大悟 这都说出来了还傻呵呵的找解决办法 我用的okio 1 7 0很明显这个版本早就过时了 当我换成okio1 9 0问题迎刃而解 哎 浪
  • 谈高考志愿填报

    目录 不如先说说我自己 一 选专业还是选学校 二 你想推荐 避雷的专业 三 填报志愿的策略 四 影响专业选择的因素 各省高考成绩已出 又到一年高考季 张雪峰提到 普通家庭不要光谈理想 也要谈落地 志愿怎样填报 选专业还是选学校 什么专业好就
  • 贝叶斯优化

    贝叶斯优化 BO RF贝叶斯优化随机森林多输入单输出回归预测 Matlab完整程序 目录 贝叶斯优化 BO RF贝叶斯优化随机森林多输入单输出回归预测 Matlab完整程序 预测结果 基本介绍 评价指标 程序设计 参考资料 预测结果 基本介
  • eclipse+maven搭建web项目(非常详细)

    一 前言 用maven我们能做什么 有什么好处 用maven 我们可以方便统一的进行jar包管理 jar包版本升级 快速项目构建以及分模块开发等相关功能 maven使用得好 项目开发速度就会成倍的提升 总之 项目越大 越能体现maven的优
  • java获取服务器一些信息的方法(服务器地址/相对路径/端口/项目名字)

    request getServletContext getRealPath 获取项目所在服务器的全路径 如 D Program Files apache tomcat 7 0 25 webapps TestSytem request get
  • 商品期货人数(期货品种数量)

    现在中国有多少万人从事期货投资呢 比投资的股市人数 相差多少呢 目前来说 期货账户大约150万 活跃账户大约90万左右吧 与股票投资相比肯定是小巫见大巫了 股票投资至少是期货投资的数十倍以上 中国炒期货的人数大概多少 现在期货有很多人在炒
  • 实现简单的人脸识别项目

    目录 前言 一 首先 os 文件操作
  • 使用openfeign远程过程调用java.net.sockettimeoutexception: read timed out

    项目场景 做谷粒商城的调用openfeign时报错 问题描述 一直走不下去第二步 一开始以为代码错了 debug是可以调用到那个返回的却有返回值 但是它调用了两次那个方法 因为我方法里面还有远程调用别的方法导致了超时 解决方案 方法一 修改
  • Ubuntu下Linux系统部署fisco时bash操作报错权限不足(permission denied) failed to run command ‘........‘

    Ubuntu下Linux系统部署fisco时bash操作报错权限不足 permission denied failed to run command 例如这里就指的是fisco bcos这个文件权限不足 解决方法 进入该文件目录下 执行ch
  • 3个指标,帮助您衡量数字化转型成效

    当今社会 科技的引领作用十分明显 除了各种新科技 新发明 科技也带动了数字化经济的蓬勃发展 为了更好地支撑业务 赋能业务 很多企业开启了数字化转型之路 这是一个全新的尝试 我们该如何判断企业数字化转型是否成功呢 以下3个指标 可以帮助您了解
  • 基于STM32F103的IIC实验

    实验七 IIC实验 一 实验目的 1 掌握基于固件库进行编程的方法 2 掌握基于IIC的编程方法 二 实验内容 1 实现EEPROM中数据读写并通过串口输出显示 三 预备知识 1 基于STM32固件库进行编程的方法 2 基于STM32的II
  • JUC 并发编程学习

    JUC 并发编程学习笔记 学习过程观看视频 狂神说Java https www bilibili com video BV1B7411L7tE p 13 1 并发编程包 java util concurrent 普通的线程代码 Thread
  • canvas结合background实现水印平铺效果

    canvas结合background实现水印平铺效果 const text1 水印文字1 const text2 水印文字2 let canvas document createElement canvas canvas height ca
  • uni-app

    uni app 一 准备工作 1 新建项目 2 配置浏览器 3 兼容 4 新建页面 二 上手 1 pages json文件的页面配置与全局配置 2 rpx尺寸单位 3 内置组件 4 vue2写法 1 模板 2 插值语法 3 指令 4 sty
  • 技术管理者培训小结三:强弱矩阵的优势和劣势

    强弱矩阵的区分关键 绩效是部门主管考评还是项目经理考评 人员在项目中是否唯一确定 三大关注点 是否有利于快速向客户交付价值 是否有利于人员能力的长期积累 是否有利于架构的稳定和演进 一 弱矩阵的优势 有利于专项人才培养 有利于单点技术积累
  • 【ESP32_IDF】esp32 lvgl实现gif动图

    一 LVGL 开启GIF配置 lvgl menuconfig 开启GIF decoder library 配置 lvgl menuconfig 开启LV MEM CUSTOM 配置 二 将GIF图片导为C语言数组 使用lvgl的官方tool
  • C++类String的实现代码

    include