标签:os io ar sp on amp c line new
mystring.h
#ifndef _MYSTRING_H_ #define _MYSTRING_H_ #include <stddef.h> #include <iostream> class mystring { friend std::ostream &operator<<(std::ostream &os, const mystring &); friend std::istream &operator>>(std::istream &is, mystring &); friend mystring operator+(const mystring &, const mystring &); friend mystring operator+(const char *, const mystring &); friend mystring operator+(const mystring &, const char *); friend bool operator<(const mystring &, const mystring &); friend bool operator<=(const mystring&, const mystring &); friend bool operator>(const mystring&, const mystring &); friend bool operator>=(const mystring&, const mystring &); friend bool operator==(const mystring&, const mystring&); friend bool operator!=(const mystring&, const mystring &); public: mystring(); mystring(const char*); mystring(const mystring&); ~mystring(); mystring &operator=(const mystring&); mystring &operator=(const char *); mystring &operator+=(const mystring&); mystring &operator+=(const char *); char &operator[](size_t); char operator[](size_t) const; void debug() const; size_t size() const; const char *c_str() const; private: char *str_; }; inline std::ostream &operator<<(std::ostream &os, const mystring &s) { os << s.str_; } inline std::istream &operator>>(std::istream &is, mystring &s) { char buf[1024] = {0}; is >> buf; if(is){ s = buf; return is; } } inline mystring operator+(const mystring &s1, const mystring &s2) { mystring ret(s1); ret += s2; return ret; } inline mystring operator+(const mystring &s1, const char *s2) { return s1 + mystring(s2); } inline mystring operator+(const char *s1, const mystring s2) { return mystring(s1) + s2; } #endif /*MYSTRING_H*/
mystring.cpp
#include "mystring.h" #include <iostream> #include <string.h> using namespace std; mystring::mystring() :str_(new char[1]) { str_[0] = '\0'; } mystring::mystring(const char *s) :str_(new char[strlen(s) + 1] ) { ::strcpy(str_, s); } mystring::mystring(const mystring &s) :str_(new char[s.size() + 1]) { ::strcpy(str_, s.str_); } mystring::~mystring() { delete []str_; } mystring &mystring::operator=(const char *s) { if(str_ != s) { delete []str_; str_ = new char[::strlen(s) + 1]; ::strcpy(str_, s); } return *this; } mystring &mystring::operator=(const mystring &s) { if(this != &s) { delete []str_; str_ = new char[strlen(s.str_) + 1]; ::strcpy(str_, s.str_); } return *this; } mystring &mystring::operator+=(const mystring &s) { char *pt = new char[size() + s.size() + 1]; ::strcpy(pt, str_); ::strcat(pt, s.str_); delete []str_; str_ = pt; return *this; } mystring &mystring::operator+=(const char *s) { return operator+=(mystring(s)); } void mystring::debug() const { cout << str_ << endl; } size_t mystring::size() const { return strlen(str_); } const char *mystring::c_str() const { return str_; } bool operator<(const mystring &s1, const mystring &s2) { return ::strcmp(s1.str_, s2.str_) < 0; } bool operator>(const mystring &s1, const mystring &s2) { return operator<(s2, s1); } bool operator<=(const mystring &s1, const mystring &s2) { return !(s1 > s2); } bool operator>=(const mystring &s1, const mystring &s2) { return !(s1 < s2); } bool operator==(const mystring &s1, const mystring &s2) { return ::strcmp(s1.str_, s2.str_) == 0; } bool operator!=(const mystring &s1, const mystring &s2) { return !(s1 == s2); } char &mystring::operator[](size_t index) { return str_[index]; } char mystring::operator[](size_t index) const { return str_[index]; }
标签:os io ar sp on amp c line new
原文地址:http://blog.csdn.net/aa838260772/article/details/39087323