Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Undisputed
149 / 80 / 16
Регистрация: 10.06.2014
Сообщений: 1,214
Завершенные тесты: 3
#1

Как правильно сделать выбор между С и С++? - C++

08.11.2016, 10:02. Просмотров 529. Ответов 39
Метки нет (Все метки)

В первую очередь интересует с точки зрения потребления ресурсов программы а так же быстродействие
Ещё интересно, есть ли операции, которые быстрее в плюсах чем на Си?
Мне нравятся плюсы, но многие пишут что плюсы медленнее в целом чем Си а так же у плюсов есть существенный оверхед потребления ресурсов а у Си он меньше
В каких ситуациях плюсы в целом по скорости и производительности могут быть лучше Си (и могут ли вообще?)
На простых тестах на быстродействие в принципе почти одно и то же (цифры времени исполнения бегают то в пользу си то в пользу плюсов)
Понимаю что одним словом все не опишешь но хотелось бы получить хоть какую то картину
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2016, 10:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как правильно сделать выбор между С и С++? (C++):

Помогите сделать выбор между двумя книгами - C++
Хотел бы летом углубить свои знания по программированию на C++, поэтому решил купить книгу. Колеблюсь между этими двумя: C++ для...

Подскажите как правильно сделать - C++
Нужно добавить К столбцов в начало матрицы, я сделала но добавление в конец, не подскажете как добавить в начало ...

Подскажите как правильно сделать - C++
Нужно добавить К столбцов в начало матрицы, добавлять оно добавляться но оно берет память левую, выходит за приделы массива, не могу...

Как правильно сделать сортировку? - C++
Никак не получается отсортировать так, чтобы сначала сортировались люди военнообязанные и по году рождения, а затем невоеннообязанные. ...

Подскажите как правильно сделать - C++
Помогите пожалуйста нужно отсортировать четные элементы массива а не четные оставить на своих местах. Например ввожу 14 52 6 8 4 ---— 1...

Как правильно сделать список - C++
#include <iostream> #include <windows.h> struct BList{ PWCHAR fullName; PWCHAR name; PWCHAR hash; BList *next; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
08.11.2016, 12:10 #16
Цитата Сообщение от sys_beginner Посмотреть сообщение
Ну тут скорее всего все основано в страховании от ошибок при разработке и многое сделано уже за разработчика и очень эффективно, да?
Да. И, что не менее важно, протестировано, универсально и работает корректно, в отличии от самописных велосипедов.

Цитата Сообщение от sys_beginner Посмотреть сообщение
зачем нужна конкретная задача, если мы обсуждаем эффективность инструментов.
Можно с таким же успехом обсуждать эффективность молотка и отвёртки.
Undisputed
149 / 80 / 16
Регистрация: 10.06.2014
Сообщений: 1,214
Завершенные тесты: 3
08.11.2016, 12:29  [ТС] #17
Цитата Сообщение от MrGluck Посмотреть сообщение
Да. И, что не менее важно, протестировано, универсально и работает корректно, в отличии от самописных велосипедов.
Есть мнение что это не всегда хорошо потому что когда на первом месте производительность, разработчик зная природу данных в собственной реализации сможет избежать некоторых телодвижений которые делаются для универсальности и такое решение будет более эффективное чем готовое

Цитата Сообщение от MrGluck Посмотреть сообщение
Можно с таким же успехом обсуждать эффективность молотка и отвёртки.
Ну допустим речь об алгоритмах + структуре программы. Предположим если взять идентичный набор алгоритмов из Си и обернуть их в классы на плюсах, которые наследуются от определенных абстрактных классов (возможно несколько уровневое наследование(не множественное))
DrOffset
7095 / 4236 / 951
Регистрация: 30.01.2014
Сообщений: 7,012
08.11.2016, 12:51 #18
Цитата Сообщение от sys_beginner Посмотреть сообщение
Предположим если взять идентичный набор алгоритмов из Си и обернуть их в классы на плюсах, которые наследуются от определенных абстрактных классов (возможно несколько уровневое наследование(не множественное))
Зачем вот так сравнивать? Зачем тут наследование? Просто, чтобы было? Это похоже на утверждение, что обязательным атрибутом программы на С++ является наследование и классы - это совсем не так. Из непонимания этого идут дальнейшие ошибочные выводы.
И если нужно в сравнении использовать классы С++, т.е. ООП-подход, то уж, будьте добры, сранивайте его с ООП-подходом на С. Иначе в итоге сравнение выльется в ООП vs Процедурное программирование. И выше уже сказали, С++ дает выбор, если в какой-то задаче процедурный подход более эффективен, то С++ даст его использовать без проблем.
В конечном счете все сводится к тому, понимает ли программист что он делает.
Undisputed
149 / 80 / 16
Регистрация: 10.06.2014
Сообщений: 1,214
Завершенные тесты: 3
08.11.2016, 13:12  [ТС] #19
Цитата Сообщение от DrOffset Посмотреть сообщение
Зачем вот так сравнивать?
А чем не сравнение?
http://rextester.com/ZOM40340 вариант на Си
http://rextester.com/ALE79455 плюсовый вариант

Понятное дело что на hello world тестах ничего особого не будет выявлено. Просто хочу знать, если использовать тупо си с классами (только ради архитектурных решений), будет ли такой подход уступать по скорости Си если тестировать алгоритмы большого объема на двух языках просто в одном случае будут обертки в классы.
Цитата Сообщение от DrOffset Посмотреть сообщение
то уж, будьте добры, сранивайте его с ООП-подходом на С
Это было бы некорректно. Мы же не обсуждаем эффективность парадигм, а эффективность работы программы.
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
08.11.2016, 13:19 #20
Цитата Сообщение от sys_beginner Посмотреть сообщение
Мы же не обсуждаем эффективность парадигм, а эффективность работы программы.
По аналоги: что лучше - вбить гвоздь молотком или ввинтить саморез отвёрткой, если нужно повесить картину.
Разные инструменты с разными подходами.

Почему, если С++, то сразу ООП? Степанов бы очень огорчился...
Undisputed
149 / 80 / 16
Регистрация: 10.06.2014
Сообщений: 1,214
Завершенные тесты: 3
08.11.2016, 13:23  [ТС] #21
Цитата Сообщение от DrOffset Посмотреть сообщение
Зачем тут наследование? Просто, чтобы было?
Нет Допустим есть интерфейс и много реализаций, для возможности подменить реализацию без изменения исходного кода программы

Добавлено через 3 минуты
Цитата Сообщение от MrGluck Посмотреть сообщение
Почему, если С++, то сразу ООП? Степанов бы очень огорчился...
Мне по больше части от него нужно только ООП
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
08.11.2016, 13:30 #22
Цитата Сообщение от sys_beginner Посмотреть сообщение
Допустим есть интерфейс и много реализаций, для возможности подменить реализацию без изменения исходного кода программы
Так почему вы не требуете того же самого от С? И сравнивая коды, говорите что они одинаковые.
Цитата Сообщение от sys_beginner Посмотреть сообщение
Мне по больше части от него нужно
Ключевое тут первое слово. А тема называется не "Как правильно сделать выбор между С и С++ для меня?" Так что рассматривать нужно объективнее, с конкретными задачами и одинаковыми подходами.

Но что-то у нас получается как в повести "О Фоме и Ерёме".
Undisputed
149 / 80 / 16
Регистрация: 10.06.2014
Сообщений: 1,214
Завершенные тесты: 3
08.11.2016, 13:34  [ТС] #23
Цитата Сообщение от MrGluck Посмотреть сообщение
Так почему вы не требуете того же самого от С?
Потому что Си так не умеет
Цитата Сообщение от MrGluck Посмотреть сообщение
А тема называется не "Как правильно сделать выбор между С и С++ для меня?"
Ну забыл добавить "для меня" Думаю это не критично, ведь и так заметно что спрашиваю для себя

Добавлено через 34 секунды
Цитата Сообщение от MrGluck Посмотреть сообщение
И сравнивая коды, говорите что они одинаковые.
имеется ввиду по смыслу. разве это не так? ведь никто не говорит что оба примера идентичны строка в строку. но смысл с точки зрения программиста в них один
просто разные архитектурные решения на разных реализациях
DrOffset
7095 / 4236 / 951
Регистрация: 30.01.2014
Сообщений: 7,012
08.11.2016, 13:54 #24
Цитата Сообщение от sys_beginner Посмотреть сообщение
Потому что Си так не умеет
Умеет. Просто ручками надо делать чуть больше.
Undisputed
149 / 80 / 16
Регистрация: 10.06.2014
Сообщений: 1,214
Завершенные тесты: 3
08.11.2016, 14:02  [ТС] #25
DrOffset,
А можно пример?
В Си нет абстрактных классов и наследования. Насколько я знаю, максимум что можно сделать это использовать указатели на функции внутри структуры но это архитектурный костыль
В итоге получаем урезанную версию ООП и костыль В том то и смысл что хочется использовать все нормальные ООП фичи

Добавлено через 3 минуты
Цитата Сообщение от sys_beginner Посмотреть сообщение
Насколько я знаю, максимум что можно сделать это использовать указатели на функции внутри структуры
И ещё неизвестно как там будут обстоять дела с выравниванием данных в памяти
DrOffset
7095 / 4236 / 951
Регистрация: 30.01.2014
Сообщений: 7,012
08.11.2016, 14:06 #26
Цитата Сообщение от sys_beginner Посмотреть сообщение
А можно пример?
Ядро linux.

Напомню ветвь дискуссии.
Цитата Сообщение от sys_beginner Посмотреть сообщение
Допустим есть интерфейс и много реализаций, для возможности подменить реализацию без изменения исходного кода программы
Цитата Сообщение от MrGluck Посмотреть сообщение
Так почему вы не требуете того же самого от С?
Цитата Сообщение от sys_beginner Посмотреть сообщение
Потому что Си так не умеет
А теперь конкретный пример - модули ядра linux. Почти весь код ядра написан с солидной долей ООП подхода и прекрасно себя чувствует.
Язык другой, подход к ООП - другой. Это нужно понять.

Цитата Сообщение от sys_beginner Посмотреть сообщение
Насколько я знаю, максимум что можно сделать это использовать указатели на функции внутри структуры но это архитектурный костыль
А как ты думаешь реализованы виртуальные функции в С++? Именно таким способом.

Добавлено через 1 минуту
Цитата Сообщение от sys_beginner Посмотреть сообщение
И ещё неизвестно как там будут обстоять дела с выравниванием данных в памяти
Извини, но тут ты не понимаешь, о чем говоришь.
Croessmah
Модератор
Эксперт CЭксперт С++
13147 / 7410 / 830
Регистрация: 27.09.2012
Сообщений: 18,244
Записей в блоге: 3
Завершенные тесты: 1
08.11.2016, 14:12 #27
Цитата Сообщение от sys_beginner Посмотреть сообщение
А чем не сравнение?
Потому что оно глупое.
Во-первых, зачем-то приперли наследование без причины,
а во-вторых, создайте с таким подходом два "объекта" в Си.
В общем и целом, почитав тему пришел к выводу,
что Вы несете бред. Без обид, но это так.
Undisputed
149 / 80 / 16
Регистрация: 10.06.2014
Сообщений: 1,214
Завершенные тесты: 3
08.11.2016, 14:14  [ТС] #28
Цитата Сообщение от DrOffset Посмотреть сообщение
Язык другой, подход к ООП - другой. Это нужно понять.
В том то и дело что понимаю Из за того что такой подход меня не устраивает, решил создать подобную тему.
Цитата Сообщение от DrOffset Посмотреть сообщение
А как ты думаешь реализованы виртуальные функции в С++? Именно таким способом.
Ну и что? Не соглашусь. Будь это нормальным подходом в плюсах не было бы специального ООП синтаксического сахара и все до сих пор писали бы структуры с указателями на функции
Цитата Сообщение от DrOffset Посмотреть сообщение
Извини, но тут ты не понимаешь, о чем говоришь.
Возможно. В принципе указатели фиксированного размера и проблем быть не должно. Но помню где то читал что в случае использования указателей на функции внутри структуры возникают какие то проблемы с выравниванием(не вникал особо в суть)

Добавлено через 1 минуту
Цитата Сообщение от Croessmah Посмотреть сообщение
Во-первых, зачем-то приперли наследование без причины,
Мне нужно было обязательно написать реальную архитектуру из какого нибудь приложения? Я показал тот факт что в этом может быть необходимость. Что не так?

Цитата Сообщение от Croessmah Посмотреть сообщение
что Вы несете бред. Без обид, но это так.
Видимо вы просто не в состоянии уловить суть.
Croessmah
Модератор
Эксперт CЭксперт С++
13147 / 7410 / 830
Регистрация: 27.09.2012
Сообщений: 18,244
Записей в блоге: 3
Завершенные тесты: 1
08.11.2016, 14:20 #29
Цитата Сообщение от sys_beginner Посмотреть сообщение
Что не так?
Приведенный коды решают разные задачи,
потому подобному сравнению не подлежат.
Цитата Сообщение от sys_beginner Посмотреть сообщение
Видимо вы просто не в состоянии уловить суть.
Я уловил суть - зная на должном уровне C и C++
Вы бы здесь этих вопросов не задавали.
Undisputed
149 / 80 / 16
Регистрация: 10.06.2014
Сообщений: 1,214
Завершенные тесты: 3
08.11.2016, 14:24  [ТС] #30
Цитата Сообщение от Croessmah Посмотреть сообщение
Приведенный коды решают разные задачи,
потому подобному сравнению не подлежат.
Нет. Все таки не уловили суть. В сущности, с точки зрения программиста, они решают одну задачу
А именно, имеется сущность "пользователь", ему можно присвоить возраст с помощью метода/функции и получить этот возраст. Представьте что "Си"-шный пример это класс просто ввиду отсутствия необходимого для описания класса синтаксиса функции и поле просто разбросаны по файлику

Цитата Сообщение от Croessmah Посмотреть сообщение
Я уловил суть - зная на должном уровне C и C++ Вы бы здесь этих вопросов не задавали.
Ну я не утверждаю что хорошо знаю С/С++. Но в данном случае мы говорим об архитектуре а её можно обсуждать и без знаний конкретного языка. Даже, представьте себе, можно обсуждать вне контекста языков программирования, например с помощью таких вещей как UML и ему подобным.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2016, 14:24
Привет! Вот еще темы с ответами:

Как лучше это сделать?. а главное, как правильно? (Информационная система «Железнодорожный вокзал») - C++
Ситуация следующая... Есть задание курсовой работы: 11. Информационная система «Железнодорожный вокзал». Информация: рейсы — номер...

Как правильно сделать функцию? (Из Паскаля в С++) - C++
Добрый день, уважаемые программисты! Подскажите пожалуйста вот такое дело: есть код на Турбопаскале, и надо всё это дело в С++. ...

Неккоректность типов.Как правильно сделать? - C++
Приветствую вас уважаемые! Отличный форум,много полезного.) Сразу к делу. Нужен цикл,который выводит послдовательность символов в COM...

Включение, как правильно сделать инициализацию - C++
Вот код: #ifndef WINE_H_ #define WINE_H_ #include <iostream> #include <string> #include <valarray> template<typename T1,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.11.2016, 14:24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru