string 的简单实现

来源:互联网 发布:商城建站java 编辑:程序博客网 时间:2024/05/01 16:05
#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[n] = '\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;      };  }  

0 0