设计字符串类 运算符重载 C++实现 QT环境

**问题:**设计字符串类, 支持下面的操作

MyString s1;// 默认构造函数

MyString s2("hello");// 含参构造函数

MyString s3(s1); // 传参构造函数

MyString s4(5, 'c');// 自定义构造函数

=// 运算符重载

== != > < // 运算符重载


代码:

cpp 复制代码
#include <iostream>
#include <cstring>

using namespace std;

class Mystring{
    // <<
    friend ostream& operator<<(ostream &out,Mystring &s);
    // >>
    friend istream& operator>>(istream &in,Mystring &s);
private:
    char *m_space; // 存储数据
    size_t m_len; // 字符串长度
public:
    // 默认构造函数
    Mystring(){
        m_space = new char;
        strcpy(m_space,"");
        m_len = 0;
    }
    // 构造函数
    Mystring(const char *indata){
        m_len = strlen(indata);
        m_space = new char[m_len + 1];
        strcpy(m_space,indata);
    }
    // 拷贝构造函数(深拷贝)
    Mystring(const Mystring &s){
        m_len = s.m_len;
        m_space = new char[m_len + 1];
        strcpy(m_space,s.m_space);
    }
    // 析构函数
    ~Mystring(){
        if(m_space != nullptr){
            delete [] m_space;
            m_space = nullptr;
        }
    }
    // 重载赋值运算符 =
    Mystring& operator=(const Mystring &s){
        if(m_space != nullptr){
            delete [] m_space;
            m_space = nullptr;
        }
        m_len = s.m_len;
        m_space = new char[m_len + 1];
        strcpy(m_space,s.m_space);
        return *this;
    }
};
// <<
ostream& operator<<(ostream &out,Mystring &s){
    out<<s.m_space;
    return  out;
}
istream& operator>>(istream &in,Mystring &s){
    // 对之前的内存进行管理(避免内存泄漏)
    if(s.m_space != nullptr){
        delete [] s.m_space;
        s.m_space = nullptr;
    }
    // 输入新的字符串
    char buf[1024];
    in>>buf;
    s.m_len = strlen(buf);
    s.m_space = new char[s.m_len + 1];
    strcpy(s.m_space,buf);
    return  in;
}
int main(){
    Mystring s1;
    Mystring s2("Hello");
    cout<<"Please input data:"<<endl;
    cin>>s2;
    s1 = s2;
    cout<<"s2: "<<s2<<endl;
    cout<<"s1: "<<s1<<endl;
    return 0;
}

输出:

相关推荐
为何创造硅基生物2 小时前
独占指针的创建std::make_unique 本身自带堆出现
c++
kyle~2 小时前
ROS 2 与 Isaac Sim 联合仿真(一)体系架构、环境选型与基础通信闭环
c++·机器人·nvidia·仿真·ros2
努力努力再努力wz2 小时前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表
八解毒剂3 小时前
数据结构-平衡二叉树——对二叉搜索树的优化
数据结构·c++·算法
JdSnE27zv3 小时前
Qt 操作SQLite数据库
数据库·qt·sqlite
起床困难户5753 小时前
条款20:协助完成返回值优化
c++
啦啦啦啦啦zzzz3 小时前
算法总结(二分查找、双指针)
c++·算法
小短腿的代码世界4 小时前
QtitanRibbon 深度解析:工业级Ribbon界面框架的架构设计与自定义扩展
qt·3d·架构
不负岁月无痕4 小时前
C++ 模板核心内容与高频面试题汇总
java·开发语言·c++
无限进步_5 小时前
从零实现一个迷你Shell——深入理解Linux命令行解释器
linux·运维·服务器·开发语言·c++·chrome