1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
| #include "stdafx.h"
String::String(const char *str) { if (str == NULL) { m_data = new char[1]; if (m_data != NULL) { *m_data = '\0'; } else { exit(-1); } } else { int len = strlen(str); m_data = new char[len + 1]; if (m_data != NULL) { strcpy(m_data, str); } else { exit(-1); } } }
String::String(const String &other) { int len = strlen(other.m_data); m_data = new char[len + 1]; if (m_data != NULL) { strcpy(m_data, other.m_data); } else { exit(-1); } }
String::String(String&& other) { if (other.m_data != NULL) { m_data = other.m_data; other.m_data = NULL; } }
String& String::operator= (const String &other) { if (this == &other) { return *this; } delete[ ] m_data; int len = strlen(other.m_data); m_data = new char[len + 1]; if (m_data != NULL) { strcpy(m_data, other.m_data); } else { exit(-1); }
return *this; }
String& String::operator=(String&& rhs)noexcept { if(this != &rhs) { delete[] m_data; m_data = rhs.m_data; rhs.m_data = NULL; } return *this; }
String::~String(void) { if (m_data != NULL) { delete[] m_data; } }
ostream& operator<<(ostream& os, const String &c) { os << c.m_data; return os; }
|