自定义的字符串类
来源:互联网 发布:软件培训怎么样 编辑:程序博客网 时间:2024/05/22 12:44
class CTextClass{ public: CTextClass(char *pText) { Copy(pText); } ~CTextClass() { Delete(); } CTextClass(const CTextClass &text) { Copy(text.m_pText); } CTextClass& operator= (const CTextClass &text) { if (&text == this) return *this; // 需要先删除 Delete(); Copy(text.m_pText); return *this; } char& operator[] (const int index) { if (index >= m_length) throw std::bad_exception(); return m_pText[index]; } // 需要返回常量否则仍旧可以修改成员变量的值 const char& operator[] (const int index) const { if (index >= m_length) throw std::bad_exception(); return m_pText[index]; } friend std::ostream& operator << (std::ostream &os, const CTextClass &text); private: void Copy(char *pText) { m_length = strlen(pText) + 1; if (m_length == 0) { m_length = 1; m_pText = new char[m_length]; } else { m_pText = new char[m_length + 1]; strcpy(m_pText, pText); } m_pText[m_length - 1] = 0; } void Delete() { if (m_pText) delete m_pText; m_pText = nullptr; m_length = 0; } // 禁止使用C++11的转移语法 CTextClass(CTextClass &&text); CTextClass& operator= (CTextClass &&text); private: char* m_pText; size_t m_length; };// 输出test中的内容std::ostream& operator << (std::ostream &os, const CTextClass &text){ return os << text.m_pText << std::endl;}
需要注意:
1. operator= 重载需要注意判断是否是自己赋值给自己,如果不是自己赋值给自己,需要先将之前的删除掉
2. 常成员函数operator[] 返回值需要是常引用,如果不是就仍旧可以通过 text[0] = 'a'; 来修改成员变量的值
3. 非常成员函数operator[] 返回值需要是引用,需要可以进行赋值操作,否则编译器会报错,需要可以执行text[0] = 'a';的操作
0 0
- 自定义的字符串类
- 自定义字符串类MyString的C++实现
- Cpp--处理字符串的自定义类
- 自定义的字符串类型
- 字符串的拼接--自定义函数
- python中自定义类对象json字符串化的方法
- cocos2d-x 自定义分割字符串的封装类
- Redis自定义类(支持字符串,数组,对象的存取)
- 截取字符串长度的自定义标签
- ASP获取字符串长度的自定义函数
- 如何实现自定义格式字符串的输出
- 自定义eclipse一行显示字符串的数目
- 自定义随机生成指定的长度字符串
- 自定义数字和字符串的转换函数
- 自定义TextView-显示一串五颜六色的字符串
- 自定义与字符串相关的函数
- springmvc自定义类型转换器【字符串--->POJO类】
- 自定义的精简版String类,重载了各种字符串的运算符操作
- 【iOS】汉字数组,按首字母排序
- mac下liteide gdb 调试
- PJSIP 添加视频的思路和想法
- 开源内存数据库H2 实现单元测试用例的独门独户
- JS日期选择器
- 自定义的字符串类
- 【翻译】利用加速度求解位置的算法——三轴传感器
- 2057 The manager's worry(树状数组)
- (仿360卸载后弹窗)Android卸载程序之后跳转到指定的反馈页面
- 素数求和问题
- Redis键值设计
- LoadRunner监控Linux资源
- Linux下搭建FTP服务器
- ASP.NET身份验证——Windows身份认证