Изучение С++ как программиста Perl
Я программист Perl5 в течение 7 лет, и сейчас я пытаюсь изучить С++.
Некоторым синтаксисом С++ трудно понять и подумать на С++.
Например:
В Perl вы можете смешивать данные в массивах
@array = (1,"string",5.355);
Вы можете назначить любое значение скалярной переменной:
$var = 1;
$var = "string";
$var = \$reference_to_scalar;
Существует много примеров.
Мой друг рекомендую мне книгу Брюса Эккеля "Думая о С++", но у меня нет ни одного фона C, и мне трудно понять некоторые вещи.
Итак, мой вопрос: можете ли вы порекомендовать мне книгу для этой ситуации. Я не хочу учиться C. Я понимаю ООП (я также больше знаком с С++ oop), я понимаю точку указателей (и некоторую арифметику) и ссылки (широко используемые в Perl).
Мне не нужны руководства для манекенов (что есть int
, bool
, double
, if
, while
), мне просто нужно руководство, как выучить С++ с точки зрения Perl программист, потому что я уверен, что таких меня много.
Спасибо заранее.
EDIT: Спасибо за все рекомендованные книги и ответы, я попробую с "Ускоренным С++". Я начну с самого начала и попытаюсь изменить свой мозг на С++. Я добавил тег "beginner".
Ответы
Ответ 1
"C++ For Perl Programmers" - довольно специфический запрос. Учитывая, что Perl абстрагируется от большей части машины, чем C++, я думаю, что хорошим способом начать было бы забыть то, что вы знаете о Perl, и получить обычную книгу C++.
Например, вам кажется разумным, что вам должно быть разрешено иметь несколько типов данных в массиве, потому что массив Perl является высокоуровневой конструкцией, а не просто последовательной последовательностью слов в памяти. Если бы я собирался перейти от массива в C++ к массиву в Perl, я бы сказал, что массив Perl подобен массиву C++, который содержит указатели на данные вместо данных (если это даже верно - я не программист на Perl, так что может и не быть. Может быть, массив Perl больше похож на структуру данных связанного списка. В любом случае, вы поняли идею.) Возвращаться назад, IMO, не совсем то же самое.
Что касается книги, которую я бы порекомендовал - есть много хороших, так что это зависит от стиля и глубины, которую вы ищете. Я думаю, что " Ускоренный" C++ отлично подходит для наращивания - он тщательный и охватывает большую часть земли, не затопляя вас утомительными деталями.
Ответ 2
Не заботьтесь о том, чтобы учиться C, если вы не хотите знать C. Программирование на С++ - это совсем не похоже на программирование на C. Я понимаю, что большинство книг и учителей требуют иного, но они ошибаются. Вы должны искать исключения, такие как ранее упомянутый "Ускоренный С++".
Вы не найдете книг, которые помогут вам написать код, например, код, который вы только что показали. Perl - очень слабо типизированный язык, а С++ - это как раз наоборот: строго типизированный язык. Однако есть способы получить то, что вы показываете в своем посте, в различных форсированных конструкциях, таких как вариант и кортеж.
Я бы предположил, что, изучая С++ как полностью независимый язык, прежде чем вступать в такие вещи. Не изучайте С++ как Perl-программист, изучите его как полный newb. Вам может быть скучно с первыми несколькими главами, но в конце вы сможете лучше понять стиль и силы, уникальные для С++, и уникальные для Perl. Я не видел ни одной книги "Xlanguage for Ylanguage", которая доставит вас туда.
Ответ 3
Я попытался изучить С++ из книги "Мышление в С++". Мне было очень тяжело учиться.
Более хорошая книга для кого-то, начиная с С++, - это "Ускоренный С++: Практическое программирование по примеру" Эндрю Кенига и Барбары Е. Му
Ответ 4
Я прошел через противоположный процесс. Одна из первых вещей, которые я узнал, заключалась в том, что, хотя вы можете написать Perl-код, похожий на C или С++, вы не должны. То же самое касается вас. Возможно, вы найдете способ написать Perl-ish С++-код, но не беспокойтесь. Языки слишком разные. Вам нужно научиться писать код на С++ в качестве программиста на С++. Уже предложено несколько книг о товарах. Я думаю, вы должны увеличить это, найти наставника. Вы получите немедленную обратную связь, если делаете что-то правильно или неправильно. Вы также можете проверить С++ FAQ Lite, особенно главы 28 и 29, касающиеся проблем для новых программистов на С++.
Самое большое отличие состоит в том, что С++ строго типизирован. Каждая переменная имеет тип, и она не изменяется. Ваш пример Perl-кода технически возможен на С++, но для него требуется дополнительная библиотека, и я не уверен, что вы еще готовы. Вместо этого способ С++ должен думать о наборе смешанных, но связанных элементов, как их собственный новый тип - struct
или class
.
Еще один отличный вариант - опубликовать конкретные вопросы на С++ здесь, на SO. Мы поощряем вопросы на уровне начинающих, пока они четко сформулированы и показывают некоторые предварительные усилия.
Ответ 5
Я второй Думая на С++. Я прочитал его, узнав perl, и я нашел его очень хорошим. Второе издание не предполагает знания C; здесь, что он говорит в разделе "Предварительные требования в предисловии":
В первом издании этой книги я решил предположить, что кто-то еще научил вас C и что у вас есть наименее читаемый уровень комфорта с Это. Мое основное внимание было уделено упростив то, что мне было сложно: язык С++. В этом издании я добавили главу, которая быстро введение в C, наряду с Думаю на семинаре C на CD, но я все еще предполагая, что у вас уже есть какой-то опыт программирования. Кроме того, как вы узнаете много новые слова интуитивно, видя их в контексте в романе, его возможное много узнать о C из контекст, в котором он используется в остальной части книги.
Как сказал данбен, вам в значительной степени просто нужно "забыть, что вы знаете о perl". Полезно знать perl только потому, что это другой язык программирования (C-like, even), но он нигде почти не подобен, чтобы просто "узнать различия".
Также: Мышление на С++ бесплатное для электронной версии.
Ответ 6
Я работаю с Perl исключительно для моей дневной работы и программы С++ для развлечения по вечерам и в выходные дни. Они требуют совершенно разных наборов разума. Вам лучше подойти к С++ как программисту noob и узнать его из "Hello World". Конечно, вы можете быстро отслеживать общие понятия таких типов данных, но все же уделять достаточное внимание, чтобы узнать свой короткий от своей длинной и вашей ссылки от вашего указателя.
Я бы сначала не изучил C, если вам действительно не нужно знать C. Обработка символов в C - это боль и не подходит для того, что, как я подозреваю, вы хотите сделать. Класс String в С++ - ваш друг: узнайте его, живите, он его любит!
Ответ 7
Мой университет рекомендовал нам эту книгу: http://www.lrde.epita.fr/~akim/ccmp/assignments.html#C_002b_002b-Primer
В любом случае, мышление на С++ доступно в Интернете бесплатно. Вы могли найти ссылку на предыдущую ссылку, которую я вам дал.
Удачи:)
Ответ 8
Здесь вы можете найти огромное количество бесплатных загружаемых/онлайн-книг.
Ответ 9
На самом деле, поскольку вы уже знаете императивный язык, изучение C вообще не займет у вас много времени. Основы все одинаковы - операторы if, while, loop, и т.д. Даже способ организации пространств имен одинаков (хотя, конечно, внутренности различны.) Возможно, вы захотите замять некоторые аспекты обработки указателей, например: C++ делает ссылки немного по-другому, но вы бы не причинили себе никакого вреда, взяв и прочитав копию K & R (официальная ссылка C) хотя бы один раз. (В любом случае, каждый порядочный программист должен иметь копию на своей книжной полке в качестве справки.)
После этого возьмите последний выпуск Stroustrup и имейте это, гарантируя, что вы выполняете упражнения. Некоторые концепции могут быть немного чужды разуму, ориентированному на Perl, но это не будет слишком странным. Если вы столкнулись с какой-то определенной концепцией, которая вам показалась бы хитрой, отправьте сообщение снова на SO, и многие люди будут рады обсудить это с вами!
(источник: wikimedia.org)
(источник: att.com)
Ответ 10
Книга Stroustrup немного усложняется при изучении языка, лучше попробовать другую книгу и использовать книгу Stroustrup в качестве справочника.