NOTE:
These are a little sketchy...I'll fill in details 'soon'.
String String::operator+(const String & right) const { char * t = nullptr; if ((length > 0) && (right.length > 0)) { t = new char [length+rigth.length+1]; if (t != nullptr) { strcpy(t,string); strcat(t,right.string); } } else if (length > 0) { t = new char [length+1]; if (t != nullptr) { strcpy(t,string); } } else if (right.length > 0) { t = new char [right.length+1]; if (t != nullptr) { strcpy(t,right.string); } } // no else since nullptr above covers it... String t2(t); // what should t2's translation state and case // sensitivity be? if (t != nullptr) // avoid memory leak! { delete [] t; t = nullptr; } return t2; }
String String::operator+(const char right[]) const { return *this + String(right); }
String String::operator+(const char right) const { return *this + String(right); }
String operator+(const char left[], const String & right) // friend? { return String(left) + right; }
String operator+(const char left, const String & right) // friend? { return String(left) + right; }
String & String::operator+=(const String & right) { return *this = *this + right; }
String & String::operator+=(const char right[]) { return *this = *this + right; }
String & String::operator+=(const char right) { return *this = *this + right; }