IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【C++】MyString -> 正文阅读

[C++知识库]【C++】MyString

#include
#include
using namespace std;
class MyString
{
private:
char* m_data;
public:
//无参构造
MyString()
{
this->m_data = new char[1];
this->m_data[0] = ‘\0’;
}
//有参构造(通过外部C风格字符串来对类中的属性指针进行初始化。)
MyString(const char* c_str)
{
//1.获得外部字符串的字符的长度。
int len = strlen(c_str);
//2.开辟空间容纳这个长度的C型字符串。
this->m_data = new char[len + 1];
//3.通过内存拷贝的方式来拷贝外部字符串的数据到这个空间中。
//memmove , memcpy
memmove(this->m_data,c_str,len);
//4.结尾处加\0;
this->m_data[len] = ‘\0’;
}
//拷贝构造:
MyString(const MyString& other)
{
int len = strlen(other.m_data);
this->m_data = new char[len + 1];
memmove(this->m_data,other.m_data, len);
this->m_data[len] = ‘\0’;
}
//MyString的析构函数
~MyString()
{
if(m_data != nullptr)
{
delete []m_data;
//好习惯来了。
m_data = nullptr;
}
}
//获取字符串长度的函数。
int size()
{
return strlen(this->m_data);
}
//MyString的中括号运算符重载函数。
char operator[](int index)
{
//1.判断下标是否合法。
if(index < 0 || index > this->size())
{
cout << “越界” << endl;
}
return this->m_data[index];
}
//MyString的=号运算符重载
MyString& operator=(const MyString& other)
{
if(this == &other)
{
return *this;
}
//获取另一对象中的字符长度。
int len = strlen(other.m_data);
//如果本象中的中属性指针有一个指向。就需要先释放。再开辟新的足名够大的空间才可以。
if(this->m_data != nullptr)
{
delete []m_data;
this->m_data = new char[len + 1];
}else
{
this->m_data = new char[len + 1];
}
//拷贝数据:
memmove(this->m_data, other.m_data, len);
this->m_data[len] = ‘\0’;
return this;
}
//作业,写完发群里。
//同学这个自己去写,可以使用strncat,或者自己纯纯的生写。
MyString& operator+(const MyString& other)
{
//this->m_data = strncat(this->m_data,other.m_data,strlen(other.m_data));
int len = strlen(this->m_data) + strlen(other.m_data);
char
temp = new char[len + 1];
memmove(temp,this->m_data,strlen(this->m_data));
memmove(temp + strlen(this->m_data),other.m_data,strlen(other.m_data));
temp[len] = ‘\0’;
delete []this->m_data;
this->m_data = temp;

    return *this;
}
char* getM_data()
{
    return this->m_data;
}

};
//实现一个<<运算符重载;
ostream& operator<<(ostream& cout, MyString& other)
{
cout << other.getM_data();
return cout;
}
int main()
{
MyString str1;
MyString str2(“zhangsan”);//证明我们的有参构造没有问题。
str1 = str2;//我们的=号运符重载没问题。
cout << str1 << endl;//<<左移也没问题。
MyString str3(str1);//拷贝构造也没问题。
cout << str3 << endl;
cout << str3[4] << endl;
return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 10:54:41  更:2022-09-13 10:57:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:30:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码