Я студент информатики, и в результате меня учили C ++ как лучшую версию C с классами. Я заканчиваю тем, что пытаюсь изобретать велосипед всякий раз, когда необходимо решение сложной проблемы, только чтобы найти какое-то время после этого какую-нибудь языковую функцию или некоторую стандартную библиотечную процедуру, которая потенциально могла бы сделать это для меня.
Мне все хорошо с my char*
и *(int*)(someVoidPointer)
idioms, но недавно, сделав (незначительный) вклад в проект с открытым исходным кодом, я чувствую, что это не то, что нужно думать при написании кода C ++. Это сильно отличается от C.
Учитывая, что я достаточно хорошо знаю объектно-ориентированное программирование, и у меня все в порядке с крутой кривой обучения, что бы вы посоветовали мне, чтобы я занялся треком C ++, когда я пишу код на C ++?
Ответы:
Основываясь на ваших комментариях, вы знаете синтаксис C ++.
Вы пишете не на C ++, а на классах, которые часто называют C.
Тег C ++ на stackoverflow - хорошее место для начала, он включает в себя список чтения и FAQ .
Единственный реальный способ обучения - это написать код и заставить опытного пользователя комментировать. Вы можете разместить свой код здесь для просмотра. Хороший пример
Прекратите их использовать, переключитесь на std :: string.
Прекратите использовать их (кроме как для взаимодействия с кодом C). Использование концепции функтора дает несколько преимуществ (включая идею инкапсуляции состояния).
Да. C и C ++ разошлись как языки. Хотя вы можете использовать практически тот же синтаксис, что и считается хорошим кодом C, обычно не считается хорошим кодом C ++ (или наоборот).
У вас есть самые основы вниз.
С большой работой :-)
источник
Книга Effective C ++ рассказывает о многих интересных вещах и поможет вам оценить возможности C ++. Существует также Эффективный STL - я не читал его, но я уверен, что было бы здорово прочитать, если вы не знакомы с ЗППП.
Важно учиться тому, что вы должны использовать язык и не изобретать велосипед постоянно . Вы уже научились их делать, поэтому упростите себе (и другим!) И используйте инструменты, чтобы реализовать весь их потенциал.
Как примечание, вы столкнетесь с большим количеством людей, которые требуют использования ЗППП. Это так же плохо, как только использование
char*
- иногда это не правильный инструмент, и есть много других. В этом же смысле не отчаивайтесь от создания собственных контейнерных классов - если вы собираетесь использоватьchar*
лучшее место, чтобы сделать это, он надежно обернут внутри класса.источник
Я могу рекомендовать недавний дубль BUILD, данный Хербом Саттером. Один из них называется « Написание современного кода C ++: как C ++ развивался годами »:
Неплохая презентация, не слишком длинная, имеет несколько хороших указателей на новые функции в новейшем стандарте, которые дадут вам несколько советов по обновлению вашего старого стиля C / C ++.
Кроме того, вам нужно изучить STL - это не сложно, и есть много книг, например, Effective STL, или просто google для STL учебников, чтобы вы могли начать.
источник
Я прочитал « Ускоренный C ++ » Эндрю Кенига и Барбары Му, чтобы помочь мне преподавать C ++, проработав с C ++ почти десять лет. (На самом деле, в то время я начал возиться с шаблонным метапрограммированием.) Я все еще находил это откровением, хотя я не думаю, что оно научило меня новым фактам о языке. 1
Что меня научило, так это посмотреть на C ++ и использовать его как язык высокого уровня. Не возиться с необработанными указателями и
delete
использовать стандартную библиотеку везде, где это возможно.У меня такое ощущение, что это именно то, что вы после.
1 Не то чтобы у меня не было ничего, что могло бы научить меня в то время (даже сейчас, много лет спустя, их было много), но есть только столько знаний, которые вы можете втиснуть в вступительную книгу на 250 страниц.
источник
Прежде чем ответить - примечание: Idiomatic C ++ - движущаяся цель. Как язык меняется, так и его идиомы. Фактически, некоторые языковые функции предназначены для того, чтобы позволить нам покончить с идиоматическим кодом, который может быть упрощен или улучшен с некоторой поддержкой самого языка или, по крайней мере, стандартной библиотеки. Так что имейте в виду, что любой источник может только информировать вас о том, что было идиоматическим на момент написания .
Сказав это, вы бы хорошо проверить:
Сайт codereview.SX
Сеть StackExchange имеет сайт с именем codereview.stackexchange.com. . Если вы написали кусок кода C ++ - класс, часть библиотеки, что-то не слишком большое - вы можете опубликовать его там и попросить сообщество просмотреть его. Обратите внимание, что код должен компилироваться и быть в основном функциональным - этот сайт не предназначен для отладки.
Кроме того, вы можете найти там некоторый код C ++, связанный с тем, над чем вы работаете, и посмотреть, что подчеркивают рецензенты. Вы можете даже попытаться просмотреть опубликованный код самостоятельно, не публикуя ответ, а затем прочитать, что другие думают об этом.
C ++ конференции видео-презентации
Ежегодно проводится несколько конференций разработчиков, посвященных C ++:
и это даже не единственные ... во всяком случае, каждый из этих постов видео многих / всех презентаций. Это многому тебя научит , включая некоторое идиоматическое кодирование, и принцип, с помощью которого вы можете решить, что должно или не должно быть идиоматическим.
Иногда вы можете даже получить слайд-колоды динамиков.
источник
Ну, проекты с открытым исходным кодом - это очень хорошее начало. Не ожидайте, что станете профессиональным программистом на основе ваших университетских классов, они не предназначены для этого (как я написал в своем ответе здесь ).
Вы, кажется, знаете о синтаксисе, это хорошо. А теперь иди и читай чужой код и добавь свой собственный для рецензирования. Вы многому научитесь, читая код и пытаясь понять его, отладить и исправить его, и, конечно, добавив к нему придерживающиеся соглашения о кодировании, которые уже существуют.
Профессиональные книги также очень хорошая идея, как уже упоминалось, и просмотр вопросов и ответов в StackOverflow многому научит вас (это, безусловно, многому меня научит, и я считаю себя профессионалом C ++).
источник
Чтение хорошего кода на C ++, вероятно, поможет. Вы должны увидеть код, чтобы начать чувствовать его. Опять же, большая часть кода на C ++ неверна.
источник