Изучение С++ как программиста 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, и многие люди будут рады обсудить это с вами!

K&R
(источник: wikimedia.org)

Stroustrup
(источник: att.com)

Ответ 10

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