2009-03-02 2 views
6

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

Принимая это во внимание, вы знаете небольшой проект (около 1k loc), который проверяет все основные функции C++ (наследование, указатели, управление памятью и т. Д.).

Дело в том, что я программист на Java/Python, и я действительно хочу изучить C++, поэтому я некоторое время изучаю C++, но не проверял ничего из того, что я узнал за пределами небольших упражнений.

Я хочу взять все эти знания и реализовать их на практике.

ответ

11

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

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

+0

-1 Он также может изучать вредные привычки на рабочем месте. Что делать, если у него уже есть работа? Нет причин, по которым он не может учиться сам. –

+0

+1 отсюда. Конечно, вы также можете изучать вредные привычки на рабочем месте, но, по крайней мере, есть шанс на то, что вы тоже столкнетесь с хорошими привычками. Если вы не знаете тонкости языка и сами пишете код, вы просто не заметите ошибок, которые возникают. – jalf

+0

Изучение C++ только путем написания кода и тестирования - это рецепт для 1) вредных привычек и 2) багги кода. Он работает очень хорошо на более жестких языках, где вы можете предположить, что если ваш код компилируется, он четко определен и легален. В C++ программист должен уметь самостоятельно выявлять эти проблемы. – jalf

3

Я бы рекомендовал создать текстовую игру. Это действительно помогло мне укрепить мой C++. Не занимает слишком много времени, и вы можете использовать все функции, которые хотите. Придумайте игру самостоятельно. Это более увлекательно.

Еще одна отличная идея - написать простую библиотеку математики, поддерживая матрицы векторов и т. Д. Но с сегодняшними библиотеками, которые предназначены только для академических целей.

2

Зависит от того, в какой области вы хотите работать. Но ничто из того, что стоит делать правильно, входит в менее чем 1000 строк кода.

Если вы собираетесь писать игры, попробуйте написать клон Tetris.

Если вы считаете, что будете использовать сокеты и т. Д., То вам поможет простой клиент/irc.

У вас есть определенный зуд, который нужно поцарапать? Когда в последний раз вы думали: «Это отстой, я мог бы сделать лучше?». Вы можете сделать лучше?

+0

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

+0

Это зависит от того, что «стоит делать». Много полезных и полезных функций и классов полезности можно сделать гораздо меньше, чем 1000. Но * приложений *, которые стоит сделать в 1000 строк кода, вероятно, сложнее найти. – jalf

+0

Количество строк также очень мало влияет на то, сколько боли вы получите от неправильной концепции C++ неправильно. – sharptooth

8

Менеджер памяти. Это должно заставить вас задуматься о: (! Конечно)

  • управление свободным магазина
  • указателей
  • наследования (вы хотите, чтобы ваш код драйвера, чтобы использовать эту функцию)
  • шаблонов (другой способ передать менеджер вокруг - водитель # 2)
  • проектирования пользовательских структуры данных (блок памяти)
  • эффективного использования стандартного контейнера (ов)
  • алгоритмов (т о двигаться, выяснить пустые блоки, дефрагментация)
+0

Я постараюсь подобрать этот проект, но я также буду следовать советам Sharptooth и попытаться начать писать код под наставничеством у кого-то или группы людей, которые действительно компетентны в C++ dev. Я также прошу кого-то просмотреть мой проект, когда я закончу. – tatsuhirosatou

+0

Отлично! Поместите свой проект на say.google.com или github или какой-нибудь публичный сервер - вы никогда не знаете, сколько может быть интересно! – dirkgently

5

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

Подходящий проект, в котором он касался всех важных функций, может быть чем-то , по-видимому прост как написать правильный класс контейнера, аналогичный std :: vector или std :: list. Обеспечьте безопасность исключений, действительность итератора, соответствующую временную сложность для всех операций и любое другое требование, указанное в стандарте.

Проблема с этим, а также с большинством других проектов заключается в том, что вы не будете знать, когда все будет готово. Создание изменчивого массива может занимать 50 строк кода и 20 минут вашего времени. И тогда начинающий подумает, что он закончил. Для обеспечения исключительной безопасности вам необходимо определить все места, где класс может быть исключен из состояния несогласованности.

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

Как сказал sharptooth, для языка, такого же грязного, как C++, писать код сам по себе является рискованным. Легко попасть в ловушку «Я написал код, он компилируется и кажется запущенным, поэтому он правильный». Конечно, вы можете опубликовать свой код здесь или на других сайтах для ознакомления или, может быть, просто дополнить свое кодирование, прочитав документы для актуального высококачественного кода на C++ (большинство библиотек с большей интенсивностью, как правило, имеют исчерпывающую документацию, в которой указаны как обоснование различных дизайнерских решений , и как он безопасно обрабатывает все странные особые случаи, которые имеют тенденцию возникать на C++. Конечно, сам стандарт C++ был бы еще одним отличным ресурсом. В любом случае это может помочь вам определить, какие проблемы нужно искать)

4

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

Независимо от того, что вы выбираете, чтобы избежать обучения при программировании на С ++, это ловушка, которая истощает всю вашу игру и, вероятно, научит вас плохим привычкам C++ в этом процессе.

+1

Правда о программировании графического интерфейса. Избегайте этого. Это ничего не научит вас программированию на C++, и с ним всегда больно работать. – jalf

+1

Абсолютно верно о программировании графического интерфейса, ничто другое не может повредить вашему разуму, чем писать материалы в GUI на C++ – Naveen

1

Я бы рекомендовал написать клон Tetris. Вы можете изучить много концепций C++ с этим и изучить 2d-библиотеку, такую ​​как SDL или, возможно, OpenGL throgh SDL.

Всегда хорошо иметь проект с визуальными результатами, и в конце его вы можете играть в него.

6

Effective C++ и More Effective C++

Кроме этого, выбрать (маленький?) Личный проект, который вы хотите написать и сделать это в C++. Вы не собираетесь изучать C++, прочитав проект с 1000 строк.

0

Интерактивный мир: Матрица, где каждая позиция может быть Пустотой или Бытием. Бытие - это что-то с несколькими атрибутами: возраст, время, пол, родственные связи и т. Д. Возможны несколько взаимодействий: бои, секс и дети, дружба и т. Д. У некоторых есть особые навыки, в зависимости от их отцов (унаследованные профессии) ... как умение убивать, способность производить пищу, и т. д. Возможные последствия этих взаимодействий и навыков - это изменения в атрибутах self или создание потомства (когда это возможно) или изменение атрибутов neigbor.

На каждой итерации печатайте матрицу как символы/цифры на консоли (в зависимости от атрибутов и т. Д.), Начиная с библейской итерации 0 (начальные условия по вашему выбору ... вы здесь Бог).

Теперь вы получили некоторый реальный образец тренажера, и узнал кое-что о наследовании, polimorfism, виртуальные функции, конкретизации классов и т.д.

0

Я хотел бы предложить простой текстовый редактор будет разумной целью.

Это проблемный домен, с которым у вас есть хорошее понимание.

У вас проблемы с управлением памятью, проблемы с повторным использованием классов библиотеки (stl/curses?), Проблемы с указателем и множество опций, где могут использоваться производные классы.

Для полиморфизма, возможно, вы можете читать редактор с клавиатуры или вставлять команды из текстового файла.

Существует еще один хороший ... имеющий дело с файлами.

Вам не нужно пересекать платформу. Вам не нужно открывать его. Вам не нужно показывать это кому-либо. Вам даже не нужно заканчивать. Это может быть упражнение только для вас.

1

Там, кажется, две темы, приезжающие из ответов:

  1. Вы должны выбрать проект, который мог бы привлечь более 1K LOC для того, чтобы получить истинный опыт проекта.

  2. Вам также необходимо связаться с опытным разработчиком C++, который поможет вам решить проблемы и избежать ошибок, связанных с языком.

Вы можете обойти оба из них путем качания sourceforge.net и зарегистрироваться, чтобы помочь с существующим проектом C++. Пока вы не возражаете, чтобы ваш код был открытым исходным кодом, вы должны иметь возможность найти существующий проект, чтобы учиться у опытных разработчиков, которые могут помочь, просмотрев ваш код и предложив рекомендации.

3

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

Посмотрите, как они используют C++ и создают свои собственные графические компоненты аналогичным образом.

Идеи: - Виджет виджета с витринами, который соединяется с одним из финансовых сайтов и сбрасывает исторические данные. - Простой Excel, как виджет электронной таблицы.

0

Если вы изучаете книгу, у нее должно быть много продуманных упражнений, которые вы можете реализовать и учиться. Также проверьте сайты университета и их лаборатории C++.

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