Оператор + должен быть не функцией-членом, а свободной функцией, чтобы преобразования могли выполняться для любого из его операндов. Самый простой способ сделать это - написать operator + = в качестве члена, а затем использовать его для реализации свободной функции для operator +. Что-то вроде:
String operator +( const String & s1, const String & s2 ) {
String result( s1 );
return result += s2;
}
Как и предполагали другие, вы можете перегружать для const char * по возможным причинам эффективности, но единственная функция выше - это все, что вам действительно нужно.
Обратите внимание, что ваш код в том виде, в каком он есть, должен выдавать ошибку:
String s1("hi");
String s2("hello");
str2 = str1 + "ok"; // not OK!!!
что-то вроде:
warning: deprecated conversion from string constant to 'char*'
в качестве строкового литерала (константа) "ok" - это const char *
, а не char *
. Если ваш компилятор не выдает это предупреждение, вам следует серьезно подумать об его обновлении.