2011-01-24 5 views
5

Возможный дубликат:
C++ tutorial for experienced C programmer.C на C++: Переход с одного языка на другой

I программа в ряде языков часто и использую C++ в последнее время. В основном мои классы - это просто обертки вокруг чистого кода C. Почти как структура со связанными методами. Это дает мне инкапсуляцию и конфиденциальность, которые я хочу для своих данных. У меня небольшая иерархия классов, и я просто использую наследование.

Я знаком с концепциями ОО и знаю, какие условия поиска использовать, когда мне нужно узнать о конкретной концепции в этом отношении. Однако, как я обнаружил в своем прорыве в мире программирования, часто функциональные возможности языка, которые действительно полезны, скрыты для новичков или новичков, а полезные биты, которые мне нужны, уже были написаны и находятся в библиотеке где-то свободно доступный (чаще всего часть фреймворка - как в .NET).

Какой путь вы предложили бы получить это жизненное знание на C++ и прекратите изобретать колесо (плохо).

+1

Я использую это, я все равно делаю это, за исключением того, что я больше не использую C++. – Earlz

+3

http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list –

+1

О, ладно, мое самое большое домашнее животное. Притворись, что ты ничего не знаешь * ничего, теперь, как бы ты выучил С ++? (С книгой.) Вот как вы это делаете. Если вам кажется, что вы уже знаете что-то, просто отметьте это как совпадение. Вы не переходите, вы учитесь заново. – GManNickG

ответ

4

Изучите STL, если вы планируете использовать C++ в будущем. Хотя мнения будут варьироваться в широких пределах, особенно среди умирающих, я думаю, что с C++ нет проблем, поскольку «C с объектами».

Boost также довольно устрашающий.

РЕДАКТИРОВАТЬ: Обратите внимание, что нижние нити уже поступают из штампов. C++ acolytes действительно не любят слышать, как люди выступают за использование языка как «C с объектами». Я поддерживаю свое заявление. Вы можете написать вполне прибыльный и коммерчески жизнеспособный код, не сойдя с ума с помощью RTTI-включенного, templatized, многомножественно унаследованного набора классов. Помните KISS.

+0

+1 для противостояния вниз. Нет смысла ниспровергать только потому, что вы не согласны с ответом ... –

+1

@ Джесси - на самом деле, это именно ПОЧЕМУ вы должны делать ответ, если считаете, что это ошибка и бесполезно. Этот ответ вводит в заблуждение и ошибочен. С редактированием на месте, это наполовину соблазнительно отметить это как неуместное. –

+3

@par: В 2011 году вы также можете отправить совершенно коммерческий коммерческий код от COBOL, не означает, что вам следует. Говорить, что «это может работать в любом случае», не является хорошей причиной для того, чтобы не использовать возможности laguages. Имейте в виду, что мы не говорим о том, «Должен ли я придерживаться рекомендаций моей компании по кодированию, запрещающих RTTI?» ... мы говорим о «Как мне расширить свои знания о методах программирования?», Ответ не «Притвориться, что все эти функции не существуют», и поэтому вы получаете вниз. – jkerian

1

Я предлагаю книгу Язык программирования C++ для заполнения пробелов в базовых знаниях на C++ и BOOST в качестве первого места для поиска существующих библиотек, поддерживающих ваше программирование.

9

Это неправильный способ использования C++. Вам лучше будет хватать копию ускоренного C++ и прочесть ее. Да, это книга для начинающих, но если вы не хотите продолжать рассматривать C++ как просто C с объектами, тогда вам нужно сосредоточиться на том, как программисты на C++ делают что-то, а не просто придерживаются того, что вы уже знаете. Вам нужно начинать с самого начала и строить хорошую основу на C++.

+0

Я не согласен. Когда вы идете писать, скажите алгоритм быстрой сортировки или что-то еще, почти весь код будет одинаковым между C и соответствующим C++. Вам не нужно научиться программированию с нуля, просто как в полной мере использовать дополнительные возможности C++. – Earlz

+7

Не когда _I_ написать алгоритм быстрой сортировки. Моя реализация на C++ очень сильно отличалась бы от моей версии C. Вы на самом деле указали отличный пример, почему те, кто продолжает думать о них как о том же языке, обречены на провал. –

+4

@Noah: хороший программист на языке C может писать лучшие программы, введя немного C++ (как это очевидно сделал Аран). Это не предназначено для неудачи. Это также не означает, что он получает полную выгоду, и это, конечно же, не означает, что он готов работать в команде с другими программистами на С ++ или с кодом на C++, который использует полные функции. Но в этом нет ничего от этого неправильного, и как эволюционный этап в опыте разработчиков, его нельзя осуждать или высмеивать как «неправильный способ использования C++». Смиренное начало поощряться. Глубокий конец лечения бассейна - это не единственный путь. –

0

Вы думаете о получении C++ Primer Plus? Это действительно хорошая книга.

+1

Я ненавидел эту книгу. Нет нисходящего, потому что вы не ошибаетесь сами по себе: Но я нашел, что это длинный и полный бесполезный, общий программный дерьмо. Вы знаете, как и большинство книг по программированию, которые ожидают, что у вас возникнут проблемы с не смачиванием кровати. – KitsuneYMG

+0

На самом деле, это более известная книга * bad *. : X – GManNickG

3

Скотт Мейерс books являются отличным местом для C программист, чтобы начать с C++.

+3

Не совсем. Я на самом деле пошел по этому пути или пытался много лет назад изучать C++. Книги Мейерса хороши для кого-то, у кого уже есть основы на C++ и он готов изучить некоторые хорошие эмпирические правила. Существует целая куча вещей, которые разработчики C должны знать заранее. Конечно, ни одна из книг Мейерса не могла сделать ТОЛЬКО книгу для начала. –

+0

@Noah: достаточно справедливо, но OP искал «полезные бит». – ThomasMcLeod

+0

Я не знаю, что первые книги Мейерса начинаются, но они абсолютно обязательны для чтения и, вероятно, становятся вторыми. Даже начинать, вы не можете ошибиться, прочитав их, просто планируйте перечитывать, как только у вас будет больше опыта. – par

0

Прочтите Meyers для получения конкретных советов, но также Design and Evolution от Stroustrup. Последнее влечет за собой мотивацию относительно того, почему C++ - это то, что он есть, и очень многое происходит от точки зрения «как улучшить C». Что касается «языка программирования C++», то 3-е издание очень длинное.Если вы можете найти второе издание, его гораздо более удобоваримый, хотя, разумеется, иногда устаревший (но в основном чуть менее полный).

2

Я предлагаю вам прочитать книги:

"C++ Стандарты кодирования: 101 правила, советы и рекомендации" --Sutter & Alexandrescu

"Современные C++: Обобщенное программирование и прикладные шаблоны проектирования" - -Alexandrescu

И, возможно, что-нибудь еще Андрей Александреску, с которым вы можете справиться.

Затем существует ряд шаблонов проектирования и идиом программирования, которые делают его очень понятным, почему «C с объектами» является чрезвычайно редукционистским. Просто назовите несколько: RAII (Инициализация распределения ресурсов), PImpl (или Cheshire Cat), Factory functions, Smart Pointers, Singleton, Type Traits, Expression Templates и т. Д. Когда вы знаете об этом, вы больше не программируете на C++ , но в ++ C (потому что вы получаете результат, который фактически отражает прирост над C).

Что касается не изобретательности колеса, как многие уже сказали, обязательно изучите возможности в стандартной библиотеке шаблонов (STL) (что намного богаче, чем вы могли бы подумать), а затем посмотрите на Boost (www. boost.org), который имеет библиотеки для самых разных целей, и они чрезвычайно высокого качества (и некоторые из них - только произведения искусства, такие как Spirit, Proto, Lambda и MPL). После этого в C++ есть большое количество программного обеспечения с открытым исходным кодом, но используйте его с осторожностью: иногда лучше изобретать колесо, которое идеально подходит для вашего приложения, чем использовать тот, который может быть непригоден или достаточно мощный или, что еще хуже, полный ошибок!

+1

Книга стандартов кодирования подталкивает ее. Помните, что OP знает только C в этот момент. Использование C++ ограничивалось добавлением функций-членов в структуры. Книга стандартов кодирования предполагает гораздо больше знаний, чем это. Это может быть хорошим дополнением, но, как Майерс, не может быть единственным стартером. Книга Александреску - значительно более продвинутый материал. Легко забыть, насколько продвинуты некоторые из этих материалов, когда вы уже не новичок. Современный дизайн C++ не поможет новичкам вообще. –

Смежные вопросы