В чем отличия C++ и C# ?

Доброго времени суток.
Хочу начать программировать, но в самом начале хочу разобраться с языками.
1) Подскажите пожалуйста чем отличаются C++ и C#?
2) Насколько они похожи по синтаксису?
3) Возможно ли изучая например C++ "переключится" на C#, не прибегая к изучению всего языка с 0?
4) Возможна ли разработка под android на этих языках? (Тут, я думаю, следует дать небольшое пояснение. По моей задумке небольшие задачки с программированием под android, для себя, были бы очень полезны. )
5) С какого языка проще начать ?
  • Вопрос задан
  • 241831 просмотр
Решения вопроса 1
Deerenaros
@Deerenaros
Программист, математик, задрот и даже чуть инженер
Тут все пишут про отличия. Рискну написать про сходства.

Во-первых, о чём бы ни писала Елена и Си++ и C# - оба языки общего назначения. Даже больше, оказывается - C# ни разу не заточён под объёмную библиотеку (или фреймворк) .NET, однако с ним намного, много проще. Но если таки учитывать .NET, то для Си++ есть Boost и Qt, так что здесь скорее паритет - библиотек для обоих хватает.
Во-вторых, сложность разработки на Си++ часто преувеличена. Разве только дисциплины надо поболее - выстрелить в ногу здесь попроще. Однако при этом Си++ будет чутка более гибкий и без танцев с бубнами unmanaged код не запустить на C#. Если внезапно потребуется.
В-третьих, оба языка, раз они общего назначения, таки мультипарадигмальные. То есть они реализуют большинство практик. И хотя Си++ развивается довольно медленно, сейчас Си++ резко догнал C# в плане нереализованных фич (здесь как минимум лямбды). Ну и метапрограммирования у Си++ поболее будет (наглая ложь).
В-четвёртых, оба языка кроссплатформеные. Впрочем, C# будет более кроссплатформенный, чем Си++. Разве только тот же Qt резко стёр границы, но это не значит почти ничего - C# компилируется в тот же самый CIL для всех платформ, Си++ - в совершенно разный код для разных платформ (i386, amd64, ARM Cortex-AXX).
Наконец, в пятых, синтаксис у них действительно очень похож. Оба языка принадлежат к семейству Алгол-подобных, так что и брейсы, и остальные скобки здесь имеют примерно одно предназначение.

Различия, которые казалось бы делают языки совершенно разными, таки не столь принципиальны на том уровне абстракции, на котором был задан вопрос. А различия действительно колоссальны: C# - managed код, что означает, что скомпилированный код будет исполнятся не на прямую в CPU, а на специальной виртуальной машине. Это съедает производительность, но сильно облегчает перенос кода. Ну и потом, C# - полупроприетарный ответ Java (что интересно, так как получается, что C# - более свободный, чем Java), которая была создана как замена сложному и небезопасному C++ в том числе.

В общем, как человек, который начал давно с C#, продолжив C++ и по пути изучив Python, Java, D и другую ООП-чушь могу с уверенностью сказать, что разницы в общем-то и нет... То есть придётся немного проникнуться в чуть другую философию и выяснить, какие проблемы более новый язык пытался решить. Но если подходить к этому, как подошёл lookid, то это скорее не как изучать языки одной языковой группы, а как изучать один и тот же язык в разное время или в разных сферах.

Почему так? Потому что ООП... Оно как бы ООП, ничего сверхъестесственного ни один язык не предлагает, это не Haskell, и тем более не Brainfuck. Так что принципиально общие вещи в них будут. То подмножество, что реализует машину Тьюринга - у них общие. Сами посмотрите: циклы, ветвления, передача аргументов, арифметика... С небольшими правками всё совершенно одинаковое. Да, Дмитрий совершенно прав, traits на C# не повторишь, ибо та аналогия будет уже не traits, однако... Это уже [programming_language] related, то есть это попытка совладать с особенностями.

Немного пруфов: лично я ходящий пруф. Зная C++ и C# и немного Java я просто начал программировать на Python. При том, что Python даже алголоподобным не принадлежит. А всё потому, что логика одна и та же, хотя различий между Python и C(++|#) намного, много больше. Но не читая почти никаких туториалов, пройдясь галопом по европам с документацией сейчас я знаю python достаточно для серьёзного проекта.

UPD. По поводу метапрограммирования... Таки рантайм рефлекшн шарпа тащит. И хотя ни макросов, ни шаблонов, ничего. Но изменять код на лету - это уже очень круто. По дефолту плюсы так не умеют, и хотя шаблоны с макросами тащат, сильно, очень сильно тащат и вытаскивают его, Си++, со дна, надо признать - рефлешн у шарпа будет поинтереснее. Извиняюсь за дезу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 9
@lookid
Вы немного не понимаете масштабы. Язык программирования это как иностранный язык. Программировать под, это как писать статьи в журнале про что-либо. Фактически отличие в С++ и C#, как между английским и немецким. Писать на них под андроид, это как писать статьи по машиностроению или строительству на английском и немецком. Перейти всегда можно, область сменить всегда можно. Но, что бы стать хорошим кодером в чем-то нужно потратить время на изучение предметной области и языка. Вы можете писать про местные соревнования по гонкам и с помощью переводчика, но будет не то. Так что готовьтесь, что придется посидеть и поизучать, а не сразу убийц энгрибердс писать.
Ответ написан
@DancingOnWater
Изучал C# после 5 лет C++.

2)Синтаксис C# - Си-подобный, но различий прилично.
3)С нуля вполне возможно переключится, но по первости делать многие вещи вы будете не так, как предлагают разработчики языка.
4) Да, есть. Про C# уже сказали, а для C++ есть Qt

Начинать вообще всегда сложно, но мое мнение - лучше с плюсов. Если начнете с шарпов, то зашорите себе мозги конкретно.
Ответ написан
Комментировать
@Perzh
Как новичек новичку скажу по поводу 5 пункта: легче начать с C#, но правильней C++ так как:
- C++ мультипарадигменный, а C# - нет (чисто ООП)
- C# решает проблемы, которые в C++ нужно решать самому.
- C# неявно использует механизмы, которые используются в C++ явно (например, указатели).

Таким образом, практика C++ покажет почему C# устроен так, а не иначе.

P.S.: лучше вообще изучать тот язык, которому тебя сможет обучить кто то знающий =)
Ответ написан
Nidora
@Nidora
Бонус 200 руб всем новым клиентам! VDS - 149 руб
C# — объектно-ориентированный язык программирования с автоматическим управлением памятью, предназначенный для программирования на платформе .NET.

C++ — кросс-платформенный язык программирования общего назначения, совместимый в большинстве случаев с C.

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

Советую начать с C# на примерах.
Ответ написан
Комментировать
1kachan
@1kachan
проще начать с C#, как только вы понимаете программирование в "общем", вам не нужно будет учить яп с 0, нужно будет выучить только синтаксис, подводные камни и общие концепции яп
Ответ написан
Комментировать
EvilsInterrupt
@EvilsInterrupt
System programming, Reversing Engineering, C++
1) Это две разные вселенные. Но при этом можно переключать мозги на разработку в один промежуток времени на С++, а после чашки чая на C#. Если нужно быстро решить проблему и при этом не парится с эффективностью выполнения программы, то C#, иначе при написании системного кода который оооочень много работает на уровне байтов, word,dword то это С++.
2) То что у них общий дедушка еще не значит что они похожи. Отличий много! Причем действительно много. Используются разные идиомы, трюки, подходы. К примеру C++ идиому traits попробуй повтори на C#. А иногда она очень выручает!!!
Ответ написан
Комментировать
risik
@risik
Программист
1) идеологией. корневое отличие - управлением памятью.
2) по синтаксису операций и операторов схожи.
3) С C++ на C# можно. в обратную сторону сложнее, но тоже можно.
4) Можно. но я рядом оговорок, см. в других комментариях.
5) Если нужны оба, то начинать с C++, так как смотри ответ на вопрос 3.

ИМХО лучше знать оба языка.
Ответ написан
Комментировать
AxisPod
@AxisPod
1) Подскажите пожалуйста чем отличаются C++ и C#?
Многим, за основую был взят синтаксис и всё. В остальном разница колосальная.

2) Насколько они похожи по синтаксису?
По синтаксису похожи в основном только на уровне C. Ну и чутка от классов. В остальном разница, в C# generics и C++ templates различаются очень сильно, в первую очередь функционалом. В C# очень много своих фишек, много синтаксического сахара.

3) Возможно ли изучая например C++ "переключится" на C#, не прибегая к изучению всего языка с 0?
Если хочется знать языки хорошо, то оба надо изучать с нуля. Свои тонкости. C++ компилируемый язык, надо знать тонкости платформ, как хранит данные в памяти и т.д. В C# кажется что-то похоже, а на деле нет, а посмотришь вглубь, так совсем нет. Здесь даже знание одного языка может быть плохим при изучение другого. Ибо название сущности одно, а поведение отличается.

4) Возможна ли разработка под android на этих языках? (Тут, я думаю, следует дать небольшое пояснение. По моей задумке небольшие задачки с программированием под android, для себя, были бы очень полезны. )
C++ NDK в руки и вперед. С C# уже сложнее, вроде как только Xamarin, имеет не мало подводных камней.

5) С какого языка проще начать?
Начать проще с C#, больше предложений на рынке. Проще сразу начать, но с повышением сложности решаемых задач накосячить становится проще.
Ответ написан
Комментировать
@1974vyacheslav
Я начал с C++, и не жалею, проще потом будет осваивать C#
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы