Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
jonikster
11 / 11 / 1
Регистрация: 26.10.2014
Сообщений: 860
1

Подходит ли мне C++? Плюсы и минусы

22.06.2017, 17:36. Просмотров 1155. Ответов 35
Метки нет (Все метки)

Здравствуйте.
Вопрос адресован к программистам C++, которые не те, кто только на словах программисты, а по настоящему программисты! Мда, вот это я загнул.
Сразу в начале скажу, что пост будет не маленьким, потому что я должен высказать всё, для полного представления вами всей ситуации.
Уже очень давно я выбираю язык программирования. И уже сдвинулся с места.
Изначально я выбирал между Python, C# и C++.
И я решил, что Python мне не помощник, а что мой выбор на C# и C++.
В будущем, я хочу разработать 1 крупный проект, потому я и выбрал C# и C++, потому что это самые лучшие варианты для моей ситуации.
Ниже я укажу мои задачи и то, чего я ожидаю от C++, помимо того задам некоторые вопросы. У кого есть возможность, пожалуйста помогите решить ситуацию и подскажите, подходит ли вообще C++ под мои задачи или нет.
Я незрячий. Полностью слеп. И моя основная задача - это разработка аудио игр. В виде дополнительной задачи, мне нужно решить, программирование моё или нет, и стоит ли сделать программирование моей основной профессией.
У нас есть аудио игры. Различные шутеры и т.д. Их много. Но разработаны большинство на C++ и на C#. Ну или на движке звуковых игр, который тоже разработан на C++.
Мне всю жизнь нравился Си-подобный синтаксис. Но пугали сложности. И я всё же решил основной упор сделать на C++, потому что:
1. Любая сложность, согласитесь, это не нереально. То есть любую сложность можно преодолеть.
2. Если преодолеть эти сложности, те кто работают с C++ понимают, что у меня открываются огромные возможности! А главное, при реализации этих возможностей, развивается логика, алгоритмическое мышление, и конечно набирается опыт! И уж тем более на C++, мне не нужно бояться за то, что у него будет маленькая скорость, будет какая-то ошибка на уровне языка и т.д.
Вот мои задачи:
1. Разработка под Windows. Причём что касается игр, скорее всего, сервер будет работать под Linux.
2. Необходимы средства для работы с клавиатурой.
3. Необходимы средства для работы со звуком. Такие решения думаю есть, типа DirectSound, Bass, а если не найду простых уже разработанных решений под эти библиотеки, то могу использовать тот же Urr klan.
4. Интересует работа с сетью. И желательно, чтобы всё было на высокоуровневом уровне, чтобы перед тем, как программировать, не нужно было становиться экспертом в областях сокетов, TCP/UDP и т.д. Кстати сразу задам вопрос. Знаю, что клиент и сервер можно писать на разных языках программирования. На сколько это так и сложнее ли в реализации, чем если писать всё на одном языке?
Я сразу скажу, что я постоянно смотрел в сторону простых решений, в сторону простых средств, просто из-за своей лени! Теперь я решил, что таким образом я не до чего не дойду. И в конце концов, простые средства от сложных отличаются лишь сложностью. А если 1 раз понять, то дальше будет только проще и интереснее!
Вот что мне требуется от C++:
1. Полностью компилируемый язык! Чтобы не было никаких ограничений.
2. Большое количество библиотек! Чтобы никогда не было их нехватки. Я уверен, что в случаи с C++, это не проблема!
3. Чтобы ничто не ограничивало меня при разработке. Чтобы я имел возможность разными путями решать задачи, чтобы я имел право самостоятельно выбирать как, что и за чем.
Я скажу, что я решил идти сложным путём. Книг простых по C++ наверно не существует. Потому я изучаю C++ по темам, через сайты и прочее, а знания закрепляю практикой.
Теперь меня интересуют вопросы:
Возможно ли, зная основы, такие как переменные, условия, циклы, массивы, указатели, ООП, уже начинать искать решения моих задач и пробовать что-то реализовывать? Если нет, что нужно доучить, чтобы уже можно было практиковаться и экспериментировать?
Чтобы реализовывать описанные мной ранее задачи, обязательно ли сильно вникать в низкоуровневое программирование, обязательно ли быть спецом в технической области? Или же не обязательно для моих задач использовать сложные инструменты C++?
Сложно ли использовать в связке C++ и Python?
И опять же о низкоуровневом. Если я хочу написать что-то типа самой программы игры на C++, а допустим логику писать на том же Python. Сложно ли это в реализации?
Ещё о низкоуровневом. Я представляю поверхносно работу компьютера, представляю память. Но не хотелось бы, чтобы для программирования на C++, нужно было бы в это углобляться слишком сильно.
Сейчас для меня самая сложная тема C++ указатели. Я вот никак не могу их понять. Потому что не имею представления как и для чего это используется, с какой целью. Но я думаю, что это не такая уж и проблема, чтобы отказываться от C++.
И вот интересует ваше мнение в целом, подходит ли мне C++?
Заранее благодарен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2017, 17:36
Ответы с готовыми решениями:

Плюсы и минусы
В массиве Z(m) найти число чередований знака, то есть число переходов с плюсов...

Игродел на C++ плюсы и минусы
Всем добрый день У меня к вам вопрос такой вот я сейчас учу C++ и хотел бы...

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

Перепись с vb.net на плюсы
Доброго времени суток, товарищи. Такой вопрос: получу ли я технологический...

В чем плюсы лямбд?
В чем очевидные и/или измеряемые плюсы лямбд в C++? Повышает ли это скорость...

35
Antikl
с++
298 / 289 / 155
Регистрация: 15.07.2015
Сообщений: 1,555
Завершенные тесты: 6
22.06.2017, 17:43 2
Книга "Язык программирования C++. Лекции и упражнения" Стивен Прата прочитать и некоторые вопросы по языку отпадут
0
hoggy
Нарушитель
Эксперт С++
7087 / 3130 / 648
Регистрация: 15.11.2014
Сообщений: 7,209
Завершенные тесты: 1
22.06.2017, 18:40 3
Цитата Сообщение от jonikster Посмотреть сообщение
Сейчас для меня самая сложная тема C++ указатели.
пока вы с этим не разберетесь,
все ваши вопросы не имеют
ни малейшего практического смысла.

Цитата Сообщение от jonikster Посмотреть сообщение
И вот интересует ваше мнение в целом, подходит ли мне C++?
нет, не подходит.
0
S_el
2151 / 1679 / 353
Регистрация: 15.12.2013
Сообщений: 6,644
22.06.2017, 19:04 4
Цитата Сообщение от jonikster Посмотреть сообщение
И вот интересует ваше мнение в целом, подходит ли мне C++?
нет, не подходит.
0
jonikster
11 / 11 / 1
Регистрация: 26.10.2014
Сообщений: 860
22.06.2017, 19:09  [ТС] 5
Почему? Обоснуйте пожалуйста ваше мнение.
0
TRam_
зомбяк
711 / 668 / 211
Регистрация: 14.05.2017
Сообщений: 2,310
22.06.2017, 19:40 6
Цитата Сообщение от jonikster Посмотреть сообщение
Возможно ли, зная основы, такие как переменные, условия, циклы, массивы, указатели, ООП, уже начинать искать решения моих задач и пробовать что-то реализовывать? Если нет, что нужно доучить, чтобы уже можно было практиковаться и экспериментировать?
Ну например взять библиотеку типа этой - https://ru.wikipedia.org/wiki/OpenAL, поискать примеры её использования, заставить эти примеры работать (нетривиальное занятие, особенно для новичка, но теоретически можно попробовать) и после этого постепенно модифицировать под себя, добавляя то-то и то-то.
0
Байт
Эксперт C
18523 / 12029 / 2507
Регистрация: 24.12.2010
Сообщений: 24,301
22.06.2017, 22:50 7
jonikster, В принципе, все современные языки более-менее эквивалентны. И с переменным успехом гонятся друг за другом. Если вы "положили глаз" (простите) на С++, то лично я одобряю ваш выбор. Обоснование? Я его знаю и люблю более прочих. Но выбор - за вами.
А указатели? Когда до вас дойдет, что это за зверь, вы будете смеяться над собой непонимающим. А все очень просто. Указатель - это просто адрес куска памяти, где находится (будет находиться) ваш объект.
Другие языки тоже пользуются указателями. Только они это скрывают от вас. А С++, он простой и наивный, он называет вещи своими именами
Удачи Вам!

Добавлено через 14 минут
Что касается С#, то у него есть на мой взгляд один крупный недостаток. Хотя возможно, я и не прав. Он жестко привязан к Виндоус. Сегодня это для вас не помеха, а послезавтра захочется сменить ОС. И что, все псу под хвост? Тем более
Цитата Сообщение от jonikster Посмотреть сообщение
скорее всего, сервер будет работать под Linux.
Но повторяю, возможно нынче такой привязки уже нет. Цивилизация движется такими темпами, что я за ней не поспеваю.
А из фреймворков на С++ я бы посоветовал вам обратить внимание на Qt. Обоснование то же - он мне нравится
0
jonikster
11 / 11 / 1
Регистрация: 26.10.2014
Сообщений: 860
22.06.2017, 22:55  [ТС] 8
Здравствуйте.
Очень благодарен вам.
Я понимаю так сложности, что каждый язык их имеет. А если не пытаться их решать, то тогда никакой язык не подойдёт.
О указателях, я знаю, что на них получаю адрес переменной в памяти. Но зачем это нужно, для каких целей, не знаю.
0
TRam_
зомбяк
711 / 668 / 211
Регистрация: 14.05.2017
Сообщений: 2,310
22.06.2017, 23:09 9
Цитата Сообщение от jonikster Посмотреть сообщение
Но зачем это нужно
Затем, чтобы в функциях работать с самим элементом, а не с его копией, уничтожаемой по окончании выполнения функции. В большинстве случаев вместо указателей можно пользоваться ссылкой, но опять же, не всегда.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
22.06.2017, 23:11 10
Цитата Сообщение от Байт Посмотреть сообщение
А С++, он простой и наивный, он называет вещи своими именами
Например std::move
0
Байт
Эксперт C
18523 / 12029 / 2507
Регистрация: 24.12.2010
Сообщений: 24,301
22.06.2017, 23:24 11
Цитата Сообщение от jonikster Посмотреть сообщение
Но зачем это нужно, для каких целей, не знаю.
Хммм... Сложновато объяснять то, что самому кажется совершенно очевидным. Попробую.
Вот например вы придумали объект. Аудио? Пусть этот объект - аккорд. Он состоит из нот. Эти ноты описываются как-то, какими-то переменными. Вот совокупность этих переменных и составит сам объект.
Аккорды могут разными в одной песне. И вам их надо где-то хранить и при надобности извлекать.
И вы говорите
C++
1
2
Accord *a1 = new Accord(do, re, mi);
Accord *a2 = new Accord(fa, sol, ci);
И эти конструкции выделяют память под ваши аккорды, но не просто выделяют, а эта память будет доступна через указатели a1, a2. То есть, если вам нужна вторая нота первого аккорда, вы напишите
C++
1
N = a1->Nots[1];
и в переменной N у вас окажется нота re
А код
C++
1
2
a2->Nots[0]; // вернет ноту fa
// Не забываем, что в C++ массивы нумеруются с 0
Если что-то непонятно, постарайтесь показать, что именно. Желательно, на простом примере
0
jonikster
11 / 11 / 1
Регистрация: 26.10.2014
Сообщений: 860
22.06.2017, 23:29  [ТС] 12
О указателях, всё равно не понятно. Нужен пример.
И всё же я не уверен с языком. Я сейчас нахожусь между C# и C++, но всё же есть огромное желание C++.
0
Байт
Эксперт C
18523 / 12029 / 2507
Регистрация: 24.12.2010
Сообщений: 24,301
22.06.2017, 23:32 13
Пусть знатоки не кидают в меня галошами. Я прекрасно знаю, что данные-члены следует делать приватными, а для доступа к ним пользоваться сеттерами и геттерами. Но я тут пытаюсь донести до ТС самую посконную суть, а главное - понять, что же, блин, тут ему непонятно!

Добавлено через 1 минуту
Цитата Сообщение от jonikster Посмотреть сообщение
всё равно не понятно. Нужен пример.
Нет уж. Теперь очередь за вами. Покажите пример, и скажите, что же в нем непонятного.
0
jonikster
11 / 11 / 1
Регистрация: 26.10.2014
Сообщений: 860
22.06.2017, 23:34  [ТС] 14
Байт, ну я часто вижу в обращении к функции, в её параметрах указатели. И зачем вот например с теми же нотами делать указатель, а не просто переменную?

Добавлено через 2 минуты
Если вам нужна конкретная ситуация и объяснение на конкретной ситуации, давайте я поищу. У меня был такой где-то код, где в том числе я не понимаю зачем там указатели.
0
TRam_
зомбяк
711 / 668 / 211
Регистрация: 14.05.2017
Сообщений: 2,310
22.06.2017, 23:43 15
jonikster, когда передаёте параметр в функцию, то функция работает с его копией. Которая будет удалена при выходе из функции. И функция сможет в виде результата выдать только то, что выводится ею в return . А исходные переменные (которые передавались в функцию) не изменятся.

А теперь представьте, что требуется не только передать что-то в return, но и изменять сами передаваемые функции переменные. Вот тогда и нужны указатели.

Например описано тут - http://younglinux.info/c/function

По поводу "где-то код" - да даже функции чтения того, что набирается на клавиатуре, делаются на основе указателей или ссылок. Чтения файлов - тоже.
0
Байт
Эксперт C
18523 / 12029 / 2507
Регистрация: 24.12.2010
Сообщений: 24,301
22.06.2017, 23:43 16
Цитата Сообщение от jonikster Посмотреть сообщение
делать указатель, а не просто переменную?
Разные памяти. Для просто переменной память называется "стек", для выделенных по new - "куча". Стеком вы не управляете. Стеком управляет обслуживающая вашу программу система, встроенная в нее (ее встраивает транслятор). А управляет она так. Вышли из функции, и тю-тю, нету вашей переменной. А в куче она хранится до тех пор, пока вы сами ее не удалите (delete)
Цитата Сообщение от jonikster Посмотреть сообщение
часто вижу в обращении к функции, в её параметрах указатели
Это чуть-чуть другой разговор. И чтобы его дальше разговаривать, мне надо знать, как вы представляете себе передачу параметров в функцию. Хорошо представляете?
0
jonikster
11 / 11 / 1
Регистрация: 26.10.2014
Сообщений: 860
22.06.2017, 23:44  [ТС] 17
Вот к примеру:
Функция:
C++
1
2
3
4
5
6
7
8
HSAMPLE BASS_SampleLoad(
 BOOL mem,
 void *file,
 DWORD offset,
 DWORD length,
 DWORD max,
 DWORD flags
);
И зачем тут void *file, почему указатель? А не обычная переменная?
Далее:
Вот опять, указатель:
C++
1
    BASS_ChannelSet3DPosition (ch, &pos, NULL, NULL);
Полный источник с тем что это и откуда здесь:
http://tiflocomp.ru/games/design/sound_games/bass.php
0
Renji
2105 / 1545 / 471
Регистрация: 05.06.2014
Сообщений: 4,484
22.06.2017, 23:45 18
Цитата Сообщение от jonikster Посмотреть сообщение
О указателях, всё равно не понятно. Нужен пример.
Указатель на родительский узел дерева, в узле дочернем. Заменить ссылкой нельзя, так как у корневого узла дерева родителя нет и указатель должен вести в никуда (nullptr).
1
jonikster
11 / 11 / 1
Регистрация: 26.10.2014
Сообщений: 860
22.06.2017, 23:47  [ТС] 19
О передаче параметров в функцию, ну так, что ввожу параметр того типа, что указан. И функция с ним работает.
0
Байт
Эксперт C
18523 / 12029 / 2507
Регистрация: 24.12.2010
Сообщений: 24,301
23.06.2017, 00:03 20
jonikster, и все-таки, вам необходимо ознакомится с механизмом передачи параметров в Си (именно в чистом Си). Ничего сложного там нет. Описан он в первых главах основоположников, Кернигана и Ричи. (K&R). Да и в любой нормальной книге по Си(Си++). А без этого так и будем топтаться на одном месте, задавая друг другу нелепые вопросы.

Добавлено через 5 минут
Цитата Сообщение от Renji Посмотреть сообщение
Заменить ссылкой
Я бы пока (в целях душевного здоровья ТС) о ссылках не стал бы говорить. В конце-концов механизм ссылок Си++ - это всего лишь замаскированный механизм указателей Си.
Тем более, что как видно из приведенного вами примера, он еще и недотепнутый. Вам респект! Мне это в голову не приходило..
1
23.06.2017, 00:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2017, 00:03

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

Плюсы среды Visual Studio 2013
Я понимаю, что слегка не по теме.., НО.. курсовую написал на C++ и именно в VS...

Объясните человеческим языком мне чайнику что такое singleton, статический класс. Зачем они нужны. Что рекомендуете прочитать мне для начала
Объясните человеческим языком мне чайнику что такое singleton, статический...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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