Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Вопросы по С/С++ (СИ)

Сообщение ПростоНуб »

Reflector, наконец-то! А для того, чтобы понимать, нужно исследовать перегрузку оператора сравнения для классов используемых объектов. А если этот код писало десять человек три года назад, быстрее будет без всякого полиморфизма написать свое сравнение, чем копаться в тысячах строках кода, врубаясь, подходит реализованная кем-то когда-то перегрузка для данного случая или нет.
Даже в описанном мной классическом случае совершенно неоднозначно, требуется сравнение указателей или строк. Иногда важно одно, иногда - другое.
Я нигде не писал "плохой", в отличии от Вас. Я только пытаюсь предупредить читателей данной темы, особенно новичков, что ad-hoc полиморфизм в C++ имеет весомые недостатки. Его использовать допустимо только хорошо отдавая себе отчет, что вернувшись к своему же коду через год-другой понадобится углубляться в изучение реализации всех перегрузок давно забытого кода.
В общем случае, лучше начинающим вообще на C++ полиморфизмом не увлекаться. Код будет прозрачней и проще.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Вопросы по С/С++ (СИ)

Сообщение Мурик »

Reflector писал(а):все дружно перебираемся на паскаль?
Лучше на бейсик. :) :idea:
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Вопросы по С/С++ (СИ)

Сообщение dosikus »

Мурик, тебе давно пора. Сидел на барсиках и нечего было слезать. Только СД мог такое за переход на барсик ляпнуть...
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Eddy_Em »

[uquote="Reflector",url="/forum/viewtopic.php?p=3709209#p3709209"]Как ты на С будешь делать подобные проверки?[/uquote]
Не буду. Это - блажь!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Вопросы по С/С++ (СИ)

Сообщение VladislavS »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3709344#p3709344"]Так что будет сравнивать полиморфный шаблон? Указатели или то, на что они указывают? А если речь будет уже о сложных объектах, с тысячами срок кода их реализации?[/uquote]Средства языка позволяют понять что за тип передаётся в шаблон и либо подобрать ему соответствующий метод сравнения, либо assert-нуть. Если программист этого не сделал, то он ССЗБ.

Добавлено after 7 minutes 10 seconds:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3709507#p3709507"]Не буду. Это - блажь![/uquote]Ваше мнение очень важно для нас! :)
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Вопросы по С/С++ (СИ)

Сообщение ПростоНуб »

VladislavS, и что будет сравниваться в моем простейшем примере? )))
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Вопросы по С/С++ (СИ)

Сообщение Reflector »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3709595#p3709595"]и что будет сравниваться в моем простейшем примере? )))[/uquote]
Если бы изначально в С параллельно с char существовал еще один 8-ми битный тип, условный byte, и char использовался только для строк, то max() принимая char* могла бы исходить из того, что это строки, сравнивать их нужно как строки и нет никаких проблем. Внимание вопрос: а при чем тут параметрический полиморфизм на мономорфном ядре? :) Ты пытаешься убедить, что проблема в С++, т.к. полиморфизм там какой-то недоделанный, но даже идеальная реализация полиморфизма бесполезна когда нельзя сказать строка перед нами или что-то другое...
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Вопросы по С/С++ (СИ)

Сообщение ПростоНуб »

Reflector, я никого не убеждаю, я просто констатирую факт, что в С++ нет параметрического полиморфизма, как, например, в ML. Вместо этого есть синтаксический сахар ad-hoc полиморфизма поверх мономорфного ядра. Именно из этого мономорфного ядра и проистекают все недостатки полиморфизма в C++. Полиморфизм в C++ не может быть "доделанным". Для этого нужно сменить ядро языка на полиморфное, но тогда это будет уже другой язык )

Добавлено after 18 minutes 38 seconds:
P.S. У меня складывается ощущение, что многие просто не понимают, что такое полиморфизм. На удивление, в Вики очень неплохая статья по этому поводу.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Вопросы по С/С++ (СИ)

Сообщение Reflector »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3709639#p3709639"]У меня складывается ощущение, что многие просто не понимают, что такое полиморфизм.[/uquote]
У меня не просто ощущение, я на все 100% уверен, что некоторые не понимают даже что такое синтаксический сахар :)
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Вопросы по С/С++ (СИ)

Сообщение ПростоНуб »

Reflector, тоже поделюсь ссылкой на статью в Вики.
Даже процитирую определение оттуда:
Под «синтаксическим сахаром» понимается любой имеющийся в языке программирования синтаксический элемент, механизм, способ описания, который дублирует другой, имеющийся в языке элемент или механизм, но является более удобным в использовании, или более краток, или выглядит естественнее, или более привычен (похож на аналогичные элементы других языков), или просто лучше воспринимается при чтении программы человеком. Принципиально то, что синтаксический сахар, теоретически, всегда можно удалить из языка без потери его возможностей — всё, что можно написать с применением синтаксического сахара, может быть написано на этом же языке и без него. Таким образом, синтаксический сахар предназначен лишь для того, чтобы сделать более удобным для программиста написание программы.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

в таком случае, всё, кроме оператора if и goto, является синтаксическим сахаром, ибо любой алгоритм реализуется в этом базисе операторов (не считая операторов элементарной арифметики и присваивания).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Вопросы по С/С++ (СИ)

Сообщение ПростоНуб »

ARV, а Вы не знали? В той же статье, на которую я давал ссылку, даже пример есть:
Например, в языке C и его потомках имеются операторы увеличения и уменьшения (++, --, +=, -= и т. п.). Введение этих операторов в язык было вызвано необходимостью поддержки ручной оптимизации программ, так как код с их использованием мог транслироваться в более эффективные машинные команды («++a» транслировалось в одну команду INC, а аналогичное выражение «a=a+1» — в целую группу команд). Развитие технологии оптимизации кода сделало подобную ручную оптимизацию бессмысленной; сейчас компиляторы порождают одинаковый код для «длинного» и «короткого» варианта операции. В результате сокращённые операторы превратились в синтаксический сахар, хотя изначально им не были.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Вопросы по С/С++ (СИ)

Сообщение ПростоНуб »

ARV, но тогда почему плюсанули сообщение Reflector? Ведь он, получается, бросил камень, в том числе, и в Ваш огород?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

Мне правда глаз не колет :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Вопросы по С/С++ (СИ)

Сообщение uldemir »

Подскажите как красиво сделать такую вещь. Есть тип направление:

Код: Выделить всё

typedef enum {
    north = 0,
    east = 1, 
    south =2,
    west =3}
И вот нужно вычислить его изменение приповороте направо или на лево.
Если в цифрах то направо (x +1) & 0x03, налево, соответственно, (x-1) &0x03. Но компилятор ругается на смешивание типов. Как это сделать красиво?
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

x++ или x-- ?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Вопросы по С/С++ (СИ)

Сообщение VladislavS »

[uquote="uldemir",url="/forum/viewtopic.php?p=3711136#p3711136"]Как это сделать красиво?[/uquote]Надо делать не красиво, а правильно. Явное приведение типов делать надо. Ты же не просто ради дефайна констант enum применил, правда?

[uquote="ARV",url="/forum/viewtopic.php?p=3711137#p3711137"]x++ или x-- ?[/uquote]Кхм, не будет так работать. Зато красиво то как :)
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Eddy_Em »

uldemir, а вам обязательно enum? Просто объявите направление движения типом int (скажем, int8_t), задефайните основные направления, а после каждой процедуры изменения делайте проверку вроде

Код: Выделить всё

int rotate(int olddir, int angle){
  olddir += angle;
  olddir %= 4;
  if(olddir < 0) olddir += 4;
  return olddir;
}
Вот и все!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Вопросы по С/С++ (СИ)

Сообщение VladislavS »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3711208#p3711208"]задефайните основные направления,[/uquote]Ну он это и сделал enum-ом.
Ответить

Вернуться в «Разные вопросы по МК»