В чем разница механизма присваивания?!

mahatm
mahatm аватар
Offline
Зарегистрирован: 15.10.2015

Предположим что у нас есть:

String st1="";

String stroka="_тут_многа_разных_букав_";

теперь если написать так:

st1=stroka.charAt(_номер_чара_из_строки_)+stroka.charAt(_номер_чара_из_строки_);

то в st1 мы получим результат сложения аски кодов,указанных чаров.

 

А если написать так:

st1=st1+stroka.charAt(_номер_чара_из_строки_)+stroka.charAt(_номер_чара_из_строки_);

что казалось бы суть одно и тоже, за исключением выкидывания того что было в st1 до присваивания в первом примере.

то мы получим совсем другое, - пару указанных чаров в той же st1!

Что бы не было инвариантности, - если мы берём 5 и 10 чар из строки, и они к примеру 0 и 5, то в первом случае в st1 окажется число 101. А во втором окажется 05, что не равнозначно как по выводному значению так и по хранимым в железяке электрончикам. :)

 

Почему так? В чём разница?

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Хотел поглумиться... ну да ладно. Сегодня вечер трезвости. Будем добрее!

В С++ это назывется "перегрузка операторов". Оператор "+" перегружен разными смыслами, зависящими от того, что мы складываем, то  есть от типов операндов.

строка + строка = строка,

срока + символ = символ.

А вот символ + символ = символ, то есть его код.

Понял?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

В 4 абзаце сразу две ошибки: пропущена буква "т" и после знака равенства должно быть "строка".

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

wdrakula пишет:

Хотел поглумиться...

...

В С++ это назывется "перегрузка операторов". Оператор "+" перегружен разными смыслами, ...

Получилось :)

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

andriano пишет:

В 4 абзаце сразу две ошибки: пропущена буква "т" и после знака равенства должно быть "строка".

угу

ЕвгенийП пишет:

wdrakula пишет:

Хотел поглумиться...

...

В С++ это назывется "перегрузка операторов". Оператор "+" перегружен разными смыслами, ...

Получилось :)

ну не получился вечер трезвости... что ж теперь?

Logik
Offline
Зарегистрирован: 05.08.2014

Так пятница ж. Нормас. Да дело в перегрузке. Штука реально опасная, можна перегрузить пошти все и получить 2+2=5. Но может быть и удобной для привлечения очередной жертвы.

mahatm
mahatm аватар
Offline
Зарегистрирован: 15.10.2015

Спасибо за  ответ. Это касается только сложения или других операторов тоже?

И в догонку: скажем в описании Стрингов, во многих местах прямо указанно, что используется Stream. Но в других описаниях функций никаких ссылок и близко нет. Как вообще надо определять откуда ноги растут у той или иной функции? Разумеется это касается только библиотек, которые не добавляются руками..

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

mahatm пишет:

И в догонку: скажем в описании Стрингов, во многих местах прямо указанно, что используется Stream. Но в других описаниях функций никаких ссылок и близко нет. Как вообще надо определять откуда ноги растут у той или иной функции?

Если есть описание - смотреть описание. Если нет описания - смотреть код.

Цитата:

Разумеется это касается только библиотек, которые не добавляются руками..

Абсолютнор без разницы, как добавлена библиотека.