Я достаточно хорошо знаю C # (самоучка, к сожалению) и мне нужно немного программировать на C ++ для приложений Windows. Я смог найти тонну информации для разработчиков C ++, изучающих C #, но не смог найти много информации об изучении C ++, когда вы уже знаете C #. Кто-нибудь сталкивался с хорошим изложением основ?
У MSDN есть сравнение, но оно не очень глубокое.
Я могу собрать воедино несколько источников, но подумал, что что-то там было - я просто не могу найти это. Спасибо за вашу помощь.
Ответы:
Этот поток на C ++ для разработчиков Java очень похож и должен быть полезен, особенно пост Марка Байера:
Вероятно, самая важная вещь, которую нужно иметь в виду, это понять разницу в методах управления памятью между C # / Java и C ++ .
Один из моих профессоров пришел из Java и преподавал вводный курс C ++, думая, что это будет торт. Ничто из того, что он объяснил, не имело никакого смысла ни для кого. У него были утечки памяти везде. Его арифметика указателя была ужасна. Он так и не попал в ООП часть учебного плана (слава богу). Практически ничего, что он продемонстрировал, не составило бы. Он не понимал, что
char[]
нужен страж\0
. Не в конечном итоге, как он.источник
char[]
тогда , не так ли?char[]
факт, что он редко используется в C ++, не означает, что его не учат или что его не следует учить.char[]
все еще важно знать, потому что C ++ является надмножеством C, и крайне важно, чтобы он был правильно понят, если его нужно изучать вообще.std::string
, и если вам нужно взаимодействовать с C API, то это для чегоc_str()
. Программисту не нужно иметь дело сchar[]
NULL-терминацией и ни с чем из этого. Обработка строк в стиле C полностью и полностью и полностью исключена для любого возможного использования, кроме взаимодействия со старым кодом C, который прекрасно обрабатываетсяc_str()
.char[]
правильное обучение , потому что все виды использованияchar[]
неправильны. Ваш профессор, вероятно, был бы абсолютно в порядке, если бы он придерживался C ++ вместо C.К сожалению, в C ++ не так уж много основ, так что я не оправдаю ваши надежды. Кроме того, вы мало что знаете о C #, который даже можно удаленно перенести в C ++, поэтому я не ожидал бы, что какой-либо конкретный материал будет существовать, охватывающий этот угол. Вам нужно будет учиться с нуля.
источник
cout
и простые способы достижения простых целейЭто не легко исправить, C ++ не особенно сложен, но не прост для начинающих.
Я бы порекомендовал прочесть основы программирования на С (чтобы получить представление о низкоуровневом материале, который вы найдете), а затем изучить STL, а затем статьи, подобные Скотту Мейерсу. Вот один из них, с которого можно начать, поскольку он показывает, как вам следует писать на современном C ++ по сравнению с C-with-классами.
источник
reading up on C programming
. Я думаю, что это приносит больше вреда, чем пользы, и наводит на мысль, что C и C ++ - это языки, которые необходимо изучать вместе.delete
массивов C и других вещей, которые не поощряются в C ++, чем они, которые я приписываю НЕ Явному изучению C. C относительно прост, вы можете довольно быстро выяснить, что делает код.malloc
иfree
. Великий разработчик C ++ в конечном итоге захочет узнать о них. Начать с них - это совсем другое.Я не уверен, что вы все еще ищете материалы, я нашел эту статью несколько месяцев назад. Это не книга (всего 53 страницы). Во введении сказано все:
This is a somewhat short guide to the important things to know if you are a C# programmer and find yourself needing or wanting to work in C++
http://geekswithblogs.net/mikebmcl/archive/2012/02/02/c-to-c-ndash-a-somewhat-short-guide.aspx
И есть также сообщение об обновлении тоже:
http://geekswithblogs.net/mikebmcl/archive/2012/02/14/c-to-cndasha-somewhat-short-guide-update-1.aspx
Счастливого обучения :)
источник
источник
Я думаю, это хорошо, что вы не найдете слишком много учебников с C # до C ++. Возможно, они запутают ваш мозг. Это все равно, что сначала попытаться научиться ездить на мотоцикле, а затем переключиться на велосипед (не совсем подходящая анология, но вы понимаете). Лучше взять свежую книгу по C ++. Поскольку вы уже знакомы с концепциями ООП, вы можете пропустить длительные введения в концепции ООП (они предназначены для людей, переходящих с C на C ++). Или перейдите прямо к справочнику, предназначенному для уровня от начального до среднего или среднего уровня.
источник
Я бы порекомендовал пойти в Rosetta Code и сравнить их. Пока вы там, держите под рукой ссылку на идиомы C ++ и постарайтесь их обнаружить. Затем потратьте некоторое время на область указатель / ссылка / память / деструктор. После этого узнайте о препроцессоре - он действительно может быть вашим другом, когда дело доходит до сокрытия уродов, я как-то скучаю по нему. Наконец, STL.
источник
Итак, около года назад я был в той же лодке, что и вы: самоучка c # dev, которая чувствовала необходимость изучать C ++. Конечно, я остановился и начал несколько раз. С третьей попытки я наконец-то с этим справился.
Необходимо понимать, что с точки зрения методологий C ++ и C # вы, вероятно, потратите много времени на понимание того, какие методы манипулирования данными с помощью указателей и ссылок действительно означают , а также когда и как их использовать в данных обстоятельствах.
Хорошая вещь в C ++ состоит в том, что выделение стека объектов по большей части довольно просто, и вы должны размещать объекты таким образом, если ваша программа будет соответствовать требованиям, указанным в этом методе. В противном случае вы полагаетесь на указатели скорости, эффективности и быстрой очистки. Я рекомендую прочитать это: http://www.parashift.com/c++-faq-lite/ поскольку это даст вам МНОГО технического понимания того, как C ++ работает под капотом.
Позволь мне привести пример:
В C ++ существует эта реализация конструктора, известная как «список инициализации», который отличается от инициализации членов класса в теле конструктора. Зачем? Поскольку, если инициализируемый тип не является примитивным, компилятор фактически создаст несколько ненужных копий объекта, создаваемого при размещении в теле ctor. Это может потенциально снизить производительность в зависимости от компилятора, а также от масштабируемых требований приложения.
Знаете, что такое делегат? Ну, в C ++ это называется указателем на функцию . Этот язык поначалу довольно сложен в освоении, но если вы хотите быть крутым ... он определенно необходим.
C # легко ... очень легко.
источник
Поверьте мне, выберите хорошую книгу по C ++ (их гораздо больше, просто выполните поиск) и начните учиться ...
источник