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;
}