您的位置:首页 > 编程语言 > C语言/C++

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;
};
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string C++