#include <iostream> #include <cstring> using namespace std; class String { private: char *str; public: String():str(NULL){}; const char * getstr() const//此处注意要设置为常量成员函数,防止str所指向的内容被修改。 { return str; } String & operator=(const String &);//赋值运算符实现深复制 String(const String&); //复制构造函数实现深复制 String & operator=(const char *); ~String(); } ; String & String::operator=(const String & s) { if(s.str==str)//防止不经意间出现自己复制自己时的bug return *this; if(str) { delete []str; str=new char[strlen(s.str)+1]; strcpy(str,s.str); } else str=NULL; return *this; } String::String(const String & s) { str=new char(strlen(s.str)+1); strcpy(str,s.str); } String & String::operator=(const char * s) { if(str) delete []str; if(s) { str=new char[strlen(s)+1]; strcpy(str,s); } else { str=NULL; } return *this; } String::~String() { if(str) delete [] str; } int main() { String s,s1; s="xxx"; cout<<s.getstr()<<endl; s="ssss"; cout<<s.getstr()<<endl; s=s; s1="ddddd"; s=s1; return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。