{"id":1473,"date":"2018-12-24T12:57:11","date_gmt":"2018-12-24T04:57:11","guid":{"rendered":"http:\/\/www.yusian.com\/blog\/?p=1473"},"modified":"2018-12-25T20:05:55","modified_gmt":"2018-12-25T12:05:55","slug":"%e8%87%aa%e5%ae%9a%e4%b9%89%e5%ad%97%e7%ac%a6%e4%b8%b2%e7%b1%bbstring%ef%bc%8c%e5%ae%9e%e7%8e%b0%e8%bf%90%e7%ae%97%e7%ac%a6%e9%87%8d%e8%bd%bd%ef%bc%8c%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86","status":"publish","type":"post","link":"https:\/\/www.yusian.com\/blog\/cpp\/2018\/12\/24\/1257111473.html","title":{"rendered":"\u81ea\u5b9a\u4e49\u5b57\u7b26\u4e32\u7c7bString\uff0c\u5b9e\u73b0\u8fd0\u7b97\u7b26\u91cd\u8f7d\uff0c\u5185\u5b58\u7ba1\u7406"},"content":{"rendered":"<p>1\u3001String.h<\/p>\n\n\n<pre lang=\"cpp\" line=\"1\">\n#pragma once\n#include <iostream>\nusing namespace std;\n\nclass String {\n\tfriend ostream &operator << (ostream &#038;, String &#038;);\nprivate:\n\tchar *m_name = NULL;\n\tchar *setM_name(const char *cstring);\n\tchar *strAppend(const char *, const char *);\npublic:\n\tString(const char *cstring = \"\");\n\tString(const String &#038;);\n\t~String();\n\tbool operator == (String &#038;string);\n\tString &#038;operator = (String &#038;string);\n\tString &#038;operator = (const char *cstring);\n\tString operator + (const char *cstring);\n\tString operator + (const String &#038;string);\n\tString &#038;operator += (const char *cstring);\n\tString &#038;operator += (const String &#038;string);\n\tchar operator[](int index);\n\tbool operator<(const String &#038;string);\n};\n\nostream &#038;operator << (ostream &#038;cout, String &#038;string);\n<\/pre>\n\n\n<p>2\u3001String.cpp<\/p>\n<p><!--more--><\/p>\n\n\n<pre lang=\"cpp\" line=\"1\">\n#include \"String.h\"\n\nString::String(const char *name) \n{\n\toperator=(name);\n}\n\nString::String(const String &str) \n{\n\toperator=(str.m_name);\n}\n\nString::~String()\n{\n\toperator=(NULL);\n}\n\nbool String::operator == (String &str) \n{\n\treturn m_name == str.m_name;\n}\n\nString &String::operator = (String &str) \n{\n\treturn operator=(str.m_name);\n}\n\nString &String::operator = (const char *name) \n{\n\tm_name = setM_name(name);\n\treturn *this;\n}\n\n\nString String::operator + (const String &string) \n{\n\treturn operator+(string.m_name);\n}\nString String::operator + (const char *cstring)\n{\n\tString newString;\n\treturn newString += cstring;\n}\n\nString &String::operator += (const String &string)\n{\n\treturn operator+=(string.m_name);\n}\nString &String::operator += (const char *cstring) \n{\n\tchar *str = strAppend(m_name, cstring);\n\tif (str) {\n\t\tsetM_name(NULL);\n\t\tm_name = str;\n\t}\n\treturn *this;\n}\n\nchar String::operator[](int index) \n{\n\tif (m_name == NULL || index < 0 || index >= strlen(m_name)) return '\\0';\n\treturn m_name[index];\n}\n\nbool String::operator<(const String &#038;string)\n{\n\tint res = strcmp(m_name, string.m_name);\n\treturn res < 0;\n}\nchar *String::setM_name(const char *cstring) \n{\n\tif (m_name == cstring) return m_name;\n\tif (m_name) {\n\t\tcout << \"delete - \" << m_name << endl;\n\t\tdelete[] m_name;\n\t\tm_name = NULL;\n\t}\n\tif (cstring) {\n\t\tm_name = new char[strlen(cstring) + 1];\n\t\tstrcpy(m_name, cstring);\n\t\tcout << \"new - \" << m_name << endl;\n\t}\n\treturn m_name;\n}\n\n\nchar *String::strAppend(const char *str1, const char *str2) \n{\n\tif (str1 == NULL || str2 == NULL) return NULL;\n\tchar *str = new char[strlen(str1) + strlen(str2) + 1]();\n\tstrcat(str, str1);\n\tstrcat(str, str2);\n\tcout << \"new - \" << str << endl;\n\treturn str;\n}\n\nostream &#038;operator << (ostream &#038;cout, String &#038;str) \n{\n\treturn cout << str.m_name;\n}\n<\/pre>\n\n\n<p>3\u3001main.cpp<\/p>\n\n\n<pre lang=\"cpp\" line=\"1\">\n#include <iostream>\n#include \"String.h\"\nusing namespace std;\n\nint main() {\n\t{\n\t\tString str1 = \"123\";\n\t\tString str2 = \"456\";\n\t\tString str3 = str1;\n\t\tstr1 = str1;\n\t\tstr1 = str2;\n\t}\n\tsystem(\"pause\");\n\treturn 0;\n}\n<\/pre>\n\n\n<p>4\u3001\u6267\u884c\u7ed3\u679c\uff1a<\/p>\n<p>new - 123<br>\nnew - 456<br>\nnew - 123<br>\ndelete - 123<br>\nnew - 456<br>\ndelete - 123<br>\ndelete - 456<br>\ndelete - 456<br>\n\u8bf7\u6309\u4efb\u610f\u952e\u7ee7\u7eed. . .<\/p>","protected":false},"excerpt":{"rendered":"<p>1\u3001String.h 2\u3001String.cpp<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[88],"tags":[207,208,209,95],"class_list":["post-1473","post","type-post","status-publish","format-standard","hentry","category-cpp","tag-operator","tag-208","tag-209","tag-95"],"_links":{"self":[{"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/posts\/1473","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/comments?post=1473"}],"version-history":[{"count":0,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/posts\/1473\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/media?parent=1473"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/categories?post=1473"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yusian.com\/blog\/wp-json\/wp\/v2\/tags?post=1473"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}