string 的简单实现
2016-06-23 14:30
489 查看
#pragma once #define _CRT_SECURE_NO_WARNINGS #include<cstring> #include<iostream> #include<utility> #include <assert.h> namespace YJ { class string { friend std::ostream& operator<<(std::ostream& out, const string& str) { out << str.m_data; return out; } friend std::istream& operator>>(std::istream& in, const string& str) { in >> str.m_data; return in; } public: string() :m_data(new char[1]) { *m_data = '\0'; } string(size_t n, const char ch) { assert(n > 0); m_data = new char[n + 1]; for (size_t i = 0; i < n; i++) { m_data[i] = ch; } m_data = '\0'; } string(const char* str):m_data(new char[strlen(str)+1]) { strcpy(m_data,str); } //string(const string& rhs) :m_data(new char[strlen(rhs.m_data)+1]) { // strcpy(m_data,rhs.m_data); //} //c++11委托 string(const string & rhs) :string(rhs.m_data) { } //移动构造 string(string &&rhs): m_data(rhs.m_data){ rhs.m_data = nullptr; } //string& operator=(const string& rhs) { // if (&rhs == this) return *this; // m_data = new char[strlen(rhs.m_data) + 1]; // strcpy(m_data, rhs.m_data); // return *this; //} //c++11写法 string& operator=(string rhs) { swap(rhs); return *this; } void swap( string& rhs) { std::swap(*this, rhs); } size_t size() { return strlen(m_data); } const char* c_str() { return m_data; } ~string() { delete[] m_data; } private: char *m_data; }; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- 关于指针的一些事情
- android上改变listView的选中颜色
- String.intern
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- PostgreSQL ERROR: invalid escape string 解决办法
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析