标签:style os io ar sp amp on c new
自己实现的一个string类,包括基本构造,复制构造,赋值和析构函数,比较函数,输入输出函数,锻炼一下动手能力。
#include <iostream> #include <cstring> #include <iomanip> using namespace std; class MyString{ public: MyString(const char *s=NULL); MyString(const MyString& rhs); MyString& operator=(const MyString& rhs); MyString& operator=(const char* s); ~MyString(); char& operator[](int i); int length() const {return len; } char *c_str(){return data;} friend bool operator<(const MyString &st1, const MyString &st2); friend bool operator>(const MyString &st1, const MyString &st2); friend bool operator==(const MyString &st1, const MyString &st2); friend MyString operator+(const MyString &s1, const MyString &s2); friend ostream& operator<<(ostream &os, const MyString &st); friend istream& operator>>(istream &is, MyString &st); private: char *data; int len; }; MyString::MyString(const char *s) { if(NULL==s) { len=0; data=new char[1]; *data='\0'; } else { len=strlen(s); data=new char[len+1]; strcpy(data,s); } } MyString::MyString(const MyString &rhs) { len=strlen(rhs.data); data=new char[len+1]; strcpy(data,rhs.data); } MyString& MyString::operator=(const MyString &rhs) { if(this==&rhs) return *this; delete []data; len=strlen(rhs.data); data=new char[len+1]; strcpy(data,rhs.data); return *this; } MyString& MyString::operator=(const char* s) { delete []data; len=strlen(s); data=new char[len+1]; strcpy(data,s); return *this; } MyString::~MyString() { delete []data; } char& MyString::operator[](int i) { return data[i]; } //注意友元函数定义时不要friend,而且不要String:: bool operator<(const MyString &st1, const MyString &st2) { return (strcmp(st1.data,st2.data)<0); } bool operator>(const MyString &st1, const MyString &st2) { return (strcmp(st1.data,st2.data)>0); } bool operator==(const MyString &st1, const MyString &st2) { return (strcmp(st1.data,st2.data)==0); } MyString operator+(const MyString &st1, const MyString &st2) { MyString res; res.len=st1.len+st2.len; res.data=new char[res.len+1]; strcpy(res.data,st1.data); strcat(res.data,st2.data); return res; } istream &operator>>(istream &cin, MyString &str) { const int limit_string_size = 4096; str.data = new char[limit_string_size]; cin >> setw(limit_string_size) >> str.data; str.len = strlen(str.data); return cin; } ostream &operator<<(ostream &cout, MyString &str) { cout<<str.c_str(); return cout; } int main() { MyString s1("I am s1."); MyString s2="Hello,This is s2."; cout<<s1<<endl; cout<<s2<<endl; MyString s3(s1); cout<<s3<<endl; s3=s2; cout<<s3<<endl; s3="My name is: " + s1; cout<<s3<<endl; s3=s1+s2; cout<<s3<<endl; return 0; }
标签:style os io ar sp amp on c new
原文地址:http://blog.csdn.net/longhopefor/article/details/38984683