Технология программирования. Базовые конструкции C/C++. Липачев Е.К. - 59 стр.

UptoLike

Составители: 

59
Замечание. Следующий код воспринимается компилятором как
ошибочный.
string str;
str="Programming " + " C++";
cout<<"\n str = "<<str;
Хотя проблема, в каком-то смысле, надуманная можно просто слить
строки, передвинув кавычки, укажем ещѐ одно решение (раскрывающее
объектную природу этого вопроса).
string str;
str=string("Programming ") + " C++";
cout<<"\n str = "<<str;
Здесь был вызван конструктор класса string и создан неименованный
объект этого класса. Хотя старый синтаксис приведения типа
string str;
str=(string)"Programming " + " C++";
также даѐт выход из ситуации, но не раскрывает, почему проблема возникла.
На самом деле, код
s3=s1+s2
означает
s3.operator = (s1.operator +=(s2));
т. е. является вызовом перегруженных функций.
Пример. Замена части строки операцией replace(n,m,s), где n
позиция в строке, с которой производится замена, m количество
заменяемых символов, а s замещающая строка. В примере замещающий
текст равен "abcd" эти 4 символа будут вставлены с 5 позиции вместо 2
символов строки str.
// Замена части строки
string str("0123456789");
cout<<"\n str="<<str;
str.replace(5,2,"abcd");
cout<<"\n str="<<str;
    Замечание. Следующий код воспринимается компилятором как
ошибочный.
string str;
str="Programming " + " C++";
cout<<"\n str = "<