Здравствуйте, sergey2b, Вы писали:
R>>Примерно тем же, чем граната в руках человека отличается от гранаты в руках обезяны.
S>мета понятна, S>но можно более формальные критерии
Здравствуйте, sergey2b, Вы писали:
S>Здравствуйте, rg45, Вы писали:
R>>Примерно тем же, чем граната в руках человека отличается от гранаты в руках обезяны.
S>мета понятна, S>но можно более формальные критерии
RAII — это свойство компилятора (при выходе из области видимости, все переменные уничтожаются, в том числе объекты с запуском деструктора). Это позволяет создать, например, ScopeGuard, когда при выходе из области видимости (например, из функции по любой причине) будет выполнен код, переданный этому ScopeGuard при его создании. Таким образом, RAII не может быть ни самописным, ни библиотечным (stl), только компиляторным.
Здравствуйте, Masterspline, Вы писали:
S>>самописный RAII считаеться или только из stl
M>RAII — это свойство компилятора (при выходе из области видимости, все переменные уничтожаются, в том числе объекты с запуском деструктора). Это позволяет создать, например, ScopeGuard, когда при выходе из области видимости (например, из функции по любой причине) будет выполнен код, переданный этому ScopeGuard при его создании. Таким образом, RAII не может быть ни самописным, ни библиотечным (stl), только компиляторным.
в Си при выходе из области видимости переменные тоже уничтожаються
S>как вы считаете чем С++ отличается от Си с классами
Виртуальные функции.
Си с классами не нуждается в виртуальных функциях — отдельные классы можно писать и без них.
Шаблоны, кстати, тоже просто классы, хоть и обобщенные.
А вот открытое наследование с виртуальными функциями — это дао ООП.
Динамический полиморфизм (так сказал Александреску).
Пока вы не постигнете виртуальность — вы не постигнете ООП.
И принцип подстановки — единственный из принципов SOLID, реализованный непосредственно в языках программирования.
Остальные принципы — это благие пожелания...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, sergey2b, Вы писали:
S>как вы считаете чем С++ отличаеться от Си с классами
Если без полутонов, то ответ в вопросе — оборачиваем код на голом C в классы и получаем конструктор, деструктор и отсутствие необходимости передавать хэндл объекта в каждую функцию
Здравствуйте, sergey2b, Вы писали:
S>в Си при выходе из области видимости переменные тоже уничтожаються
...память под которые выделенна в стеке. С++ позволяет красиво использовать это для освобождения любых ресурсов.
Здравствуйте, LaptevVV, Вы писали:
LVV>И принцип подстановки — единственный из принципов SOLID, реализованный непосредственно в языках программирования.
Можно поподробнее? Или ссылку подтверждающую.
Здравствуйте, sergey2b, Вы писали:
S>как вы считаете чем С++ отличаеться от Си с классами
Я бы провёл границу по наличию/отсутствию compile time execution. Это единственное, чего нельзя реализовать в чистом Cи. Си с классами-это есть расширенный Cи. И неважно, расширен ли он на уровне компилятора (все эти RAII, exceptions, etc) или на уровне некоторого Cи-шного фреймворка, которые предоставляет нужные функции в виде макросов, структур, процедур etc.
Здравствуйте, smeeld, Вы писали:
S>Это уже перетёрто сто раз на данном форуме.
пока выше ответившие разделились вомнении
вопрос возник потому что я пришел на собеседование
рассказал, чем я занимался, а мне говорят ты писал на Си с классами, мы поспорили 5 минут и собеседование закончилось
Здравствуйте, sergey2b, Вы писали:
S>вопрос возник потому что я пришел на собеседование S>рассказал, чем я занимался, а мне говорят ты писал на Си с классами, мы поспорили 5 минут и собеседование закончилось
S>вот решил сверить понимание вопроса
"Дизайн и эволюцию" не читал, поэтому попытаюсь сформулировать по-своему.
Есть типично Сишные приемы работы, а есть "Приплюснутые"
Скажем, run-time полиморфизм реализуем и там, и там. Но через указатели на функции — Сишная фишка, а виртуальные функции — С++.
Завязка на RAII (сюда можно отнести и использование к-торов/д-торов) — С++ приём, недостижимый в Си. В Си приходится отделять этапы получения и освобождения ресурсов от их использования.
Исключения. Завязка на исключения — это С++, применение кодов возврата — Си, либо Си с классами.
Шаблоны.
С одной стороны использование шаблонного std::vector не превращает код из "Си с классами" в С++. Зато лямбды и оптимизация шаблонного кода могут дать код гораздо эфективнее, чем аналог на Си. Т.е. можно считать, что активное применение compile-time полиморфизма, вычислений, кодогенерации делают код явно плюсатым.
Ну вот так как-то...
_____________________
С уважением,
Stanislav V. Zudin