15 / 15 / 4
Регистрация: 11.11.2014
Сообщений: 122
|
||||||||||||||||
1 | ||||||||||||||||
Приведение типов в классе26.05.2015, 22:44. Показов 1525. Ответов 35
Метки нет (Все метки)
Добрый день всем, кто увлекается.
Столкнулся с такой проблемой. Есть класс String (костыль собственного производства). Хочу перегрузить операцию сложения с прототипом:
0
|
26.05.2015, 22:44 | |
Ответы с готовыми решениями:
35
Приведение типов Приведение типов приведение типов Приведение типов |
15 / 15 / 4
Регистрация: 11.11.2014
Сообщений: 122
|
||||||
26.05.2015, 23:16 [ТС] | 3 | |||||
castaway, упс. Нехило так лaжанулся. Поправлю.
Хорошо, но вопрос остался: как перегрузить операцию сложения, чтобы происходило автоматическое приведение char к String, если такое вообще можно сделать. Как сделать приведение к стандартным типам я догадываюсь. Или здесь можно использовать что-то типа:
0
|
15 / 15 / 4
Регистрация: 11.11.2014
Сообщений: 122
|
||||||
27.05.2015, 21:47 [ТС] | 5 | |||||
castaway, да, приводится, действительно. Попробовал, теперь всё фунциклирует подобающим образом. Спасибо.
Если я правильно понимаю, то в стандартных библиотеках С нет функции, которая возвращает сумму двух строк без изменений слагаемых строк. У меня получилось так, можно ли проще?
0
|
15 / 15 / 4
Регистрация: 11.11.2014
Сообщений: 122
|
|
27.05.2015, 22:03 [ТС] | 7 |
castaway, глянул я файлик basic_string.h... тихо рыдаю в уголке ))
0
|
15 / 15 / 4
Регистрация: 11.11.2014
Сообщений: 122
|
|
27.05.2015, 22:31 [ТС] | 9 |
Не поспоришь. Но пока далеко до гуру. Так что пойду ботать матчасть.
0
|
castaway
|
27.05.2015, 22:39
#10
|
0
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
27.05.2015, 22:47 | 11 |
правильные пацаны через оператор += делают, который не свободная функция, а метод.
но внутри придется чем-то похожим заниматься. наращивать внутренний буфер, копировать в него строки, а старый удалять.
0
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
27.05.2015, 23:10 | 13 |
да можно конечно и без +=, но признанные авторитеты советуют поступать как с int. врятли вы об этом не слышали.
если есть операция += (а чего бы ей не быть, такая же полезная штука как и +), то было бы правильно и проще реализовать operator + через уже реализованный operator +=. Разве нет? добавлю, что если бинарный плюс в виде метода делается, тогда теряется некоторая гибкость: "str" + String() - не скомпилится, т.к. тут автопреобразование в String не сработает.
0
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
||||||
27.05.2015, 23:20 | 15 | |||||
что оператор += уже есть:
лучше будет делать через какие-нибудь общие спец методы или функции.
0
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
27.05.2015, 23:29 | 17 |
они одинаковые. второй - для любителей сокращать количество строк
0
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
27.05.2015, 23:34 | 19 |
елки палки, ты меня подловить на чем-то пытаешься чтоли?
сигнатуры не совпадают специально. иначе к константному аргументу lhs нельзя будет применить неконстантный operator +=. для остального кода это все пройдет незаметно до тех пор, пока кто-то не заложится на сигнутуру в коде с каким-нибудь указателем на функцию. суть изначального сообщения остается той же: через operator += оператор + реализуется легко и просто.
0
|
27.05.2015, 23:52 | 20 |
Нет. Просто я всё больше убеждаюсь в том, что твои "авторитеты" таковыми не являются.
Это и дураку понятно. У ТС они константные. Допустим тебе нужны константные. Что же, уже не сработает? Упс... Я говорю о правильном подходе, а не о через-жопном.
0
|
27.05.2015, 23:52 | |
27.05.2015, 23:52 | |
Помогаю со студенческими работами здесь
20
Приведение типов Приведение типов Приведение типов Приведение типов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |