LINUX.ORG.RU

Я не понимаю C++

 , , ,


2

2

Не вброса или холивара ради. Это крик души (:
Пытаюсь изучить плюсы. Но за какой учебник бы не взялся, какую статью бы не открыл - теряюсь. Сначала всё хорошо. Но доходит дело до указателей, указателей на указатели, ссылок, etc. в эти моменты и начинается ж*па. Всё смешивается в кашу из звёзд, амперсандов, сисек и прочего.
Гугляндексы говорят примерно такое: «Учи пока не поймёшь!!! Если не знаешь указатели, значит ты не знаешь C/C++!!!» И всякое в таком роде. Что ясности как-то не вносит.
Но сегодня на работе закаляя очередные заготовки я подумал, что неплохо бы отойти от стандартного:

int a = 15;
int *p = &a;
cout << p;
И попробовать сделать что-то более реальное(применимо ли это слово?). Тогда и по ходу дела разберусь с этими плюшками в плюсах. Но вот беда в том, что я не могу ничего придумать.
Поэтому я хочу обратиться к ЛОР'у с просьбой о историях успеха и каких-либо конкретных примерах(задачах). Они бы по возможности были просты(я не профи кодер, а повар вообще).
Может подкинете идею, чего бы написать попробовать. Опять же в целях обучения/понимания. Что бы весь ЛОР потом над говнокодом поржал (:

★★★★

Выучи просто C. Ибо в нём плюсовых говноссылок нет и всё логично.

Если ты не осилишь указатели в C - лечи мозги.

(если нужна конкретная литература - да тот же K&R)

anonymous
()
Ответ на: комментарий от anonymous

Уже начал с плюсами. Не будет ли проблем с некоторыми различиями? Как те же аргументы?

func(void) vs func()

yacuken ★★★★
() автор топика
Ответ на: комментарий от yacuken

В C func(void) == функция без параметров, func() == функция с неуказанными параметрами. Как в цпп не знаю. Но вообще за исключением некоторых деталей C++ это надмножество C.

Ну и вообще, если нет практических причин учить цпп, то в этом смысла особо нет. А учить ц в любом случае полезно для общего развития (ну собственно, прежде всего указатели)

anonymous
()

Возьми java или просто any скриптовой язык, например, python или ruby.
В указателях нет ничего сложного, потом само придёт.
Олсо можно паскаль попробовать. Там они есть и ИМХО проще вхождение.

anonymous
()
Ответ на: комментарий от anonymous

Ну практическая цель есть. Может быть, когда-нибудь поучавствовать в каком-либо опер сорс проекте. Плюсы опять же потому, что уже начал. Но на си обязательно обращу самое пристальное внимание(как минимум). Спасибо.

yacuken ★★★★
() автор топика

Не трать время на с++, если не знаешь, для чего он тебе нужен: язык сложный, часто нелогичный, по началу требует очень много проведенного за отладкой/гуглением времени - просто пролистать справочник не получится. Если хочется программировать just for fun, посмотри в сторону какого-нибудь питона.

Corey
()

Учи сперва Си. Если у тебя в С++ проблема с указателями, то тем более учи Си.

Может подкинете идею, чего бы написать попробовать. Опять же в целях обучения/понимания. Что бы весь ЛОР потом над говнокодом поржал (:

Для понимания указателей? Напиши двусвязный список.

Waterlaz ★★★★★
()
Ответ на: комментарий от anonymous

в C func() == func(int)
в C++ func() == func(void)

а про указатели... в свое время, классе в 8-ом, я читал старую советскую книжечку, где были нарисованы ячеечки памяти со стрелочками на данные... вот как-то так из картинки и явилась мне истина про указатеои %)

metawishmaster ★★★★★
()

Если проблема с указателями, то лучше начни с Си. Читай K&R.

После этого читай Страуструпа.

В обоих решай упражнения.

forCe
()

Но доходит дело до указателей, указателей на указатели, ссылок, etc. в эти моменты и начинается ж*па.

А что там может быть непонятного? На чем именно начинаются проблемы?

Всё смешивается в кашу из звёзд, амперсандов, сисек и прочего.

Для обучения можешь заводить typedef'ы на каждый чих.

forCe
()

Кстати, а зачем тебе С++?

forCe
()

Однажды не стал вникать в обозначения указателей всех мастей в Сях, но, тем не менее, вполне ясно представляю себе, как это работает, благодаря знакомству с горсткой разных ассемблеров и древних паскакалей. Упражнений для понимания сути указателей великое множество. Про двусвязные списки тут уже упоминалось.

blexey ★★★★★
()
Ответ на: комментарий от forCe

Для обучения можешь заводить typedef'ы на каждый чих.

И не для обучения тоже без них далеко не уедешь. Особенно там, где начинаются темплейты.

Corey
()
Ответ на: комментарий от Waterlaz

да, сорри, провтыкался...

C: func() == func(A, B, C, ...)
с любым количеством параметров

metawishmaster ★★★★★
()

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

hibou ★★★★★
()

и да, указатели - это не кресты, кресты - это ссылки с темплейтами.

x0r ★★★★★
()

Мне всегда казалось, что если человек не понимает указатели, то ему надо попробовать ассемблер.

mentalmenza
()

Попиши на асме, практически любом, после самостоятельного написания хотя бы вывода строки, многое прояснится.

GAMer ★★★★★
()
Ответ на: комментарий от staseg

Связные списки упускают одну из фишек указателей: то, что это числа, к которым можно прибавлять-отнимать сдвиги. Там указатель — это просто магия, позволяющая добраться до следующего элемента.

ilammy ★★★
()
Ответ на: комментарий от yacuken

Я надеюсь, что ты уже готов написать свой особенный вид строк, списков и прочего добра, лол.

anonymous
()
Ответ на: комментарий от ilammy

Урок номер два: итератор по массиву. В С++ куда важнее магия, позволяющая добраться до объектов, чем сишная дрочка буферов.

staseg ★★★★★
()
Ответ на: комментарий от yacuken

поучавствовать в каком-либо опер сорс проекте

Лучше поучаствуй в клозед-сорс под виндовс.

anonymous
()

Я не понимаю C++

Успокойся, никто не понимает.

Если не знаешь указатели, значит ты не знаешь C/C++

Это правда. Хотя я видел учебник по C++, в котором в последней главе (называвшейся как-то вроде «Advanced Concepts») было написано «а ещё в C++ есть указатели».

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

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

C++ удобнее воспринимать как некую надстройку над C.

И после этого на работу приходят пацаны с резюме «знание с/с++». Видели таких, ага...

Corey
()

в эти моменты и начинается ж*па. Всё смешивается в кашу из звёзд, амперсандов, сисек и прочего.

эти моменты называются написание говнокода. тебя что, заставляют так делать?

Если не знаешь указатели, значит ты не знаешь C/C++

Если не знаешь указатели, значит ты не знаешь как работают шайтан-машины у тебя под капотом компьютера и тебе надо вон из профессии

не благодари.

dib2 ★★★★★
()

Поэтому я хочу обратиться к ЛОР'у с просьбой о историях успеха и каких-либо конкретных примерах(задачах). Они бы по возможности были просты(я не профи кодер, а повар вообще).
Может подкинете идею, чего бы написать попробовать. Опять же в целях обучения/понимания. Что бы весь ЛОР потом над говнокодом поржал (:

Когда-то передо мной стояло две задачи: выучить с/с++ и английский (в школе учил французский). Решил убить двух зайцев сразу, написать прогу, которая через заданный интервал времени выводит окно со случайно выбранным русским/английским словом или фразой, которую нужно перевести. Пока не переведёшь, окно висит на переднем плане и мешает жить (модальное виндовое окно). Словарь - простой текстовый файл, в который можно добавлять пары слов по мере изучения языка. Сделал. Потом добавил возможность работать с разными файлами, разделяя слова по темам, добавил количество попыток перевода, рейтинги слов, чтобы чаще показывались плохо запоминаемые слова, редактирование словаря через форму, а не ноутпадом. Написание заняло месяца три. Потом в конторе сказал, что хочу перейти в отдел программистов, они как раз нужны были. Меня попросили показать пример своего кода. Я показал своё поделие, на что после изучения кода мне сказали, что такие программисты нам не нужны.

Конторы той давно уже нет, а я убил даже не двух, а трёх зайцев: значительно улучшил английский, изучил с/с++ и, плюс к этому, MFC. Под винду давно уже не пишу, но с тех пор пишу именно на с/с++, диапазон - от пользовательских приложений до драйверов. А поделие живо до сих пор. Иногда запускаю в виртуалке, ностальгирую.

anonymous
()
Ответ на: комментарий от anonymous

Ничего личного, просто имхо. Пытался пользоваться подобной программой (может и именно ей), не взлетело. Слова, вырванные из контекста представляют нулевую ценность для запоминания.

UVV ★★★★★
()
Ответ на: комментарий от Corey

Ну я тоже так пишу в резюме, хотя не придерживаюсь мнения, что это «надстройка».

UVV ★★★★★
()

Ты определись, что именно у тебя не получается понять/осознать в сях-плюсах, и спрашивай. А так мало что можно посоветовать, очень уж обширная тема.

one_more_hokum ★★★
()
Ответ на: комментарий от ilammy

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

staseg ★★★★★
()
Ответ на: комментарий от UVV

Ничего личного, просто имхо. Пытался пользоваться подобной программой (может и именно ей), не взлетело. Слова, вырванные из контекста представляют нулевую ценность для запоминания.

Именно этой ты пользоваться не мог, она была сделана исключительно для изучения предмета и исключительно для личного пользования.

И кто сказал, что слова были вырваны из контекста? Просто преподаватель предложил сделать карточки, с одной стороны слово, с другой перевод, и периодически вынимать карточки из кармана и проверять себя. Естественно, всё это было привязано к изучаемой теме, и все словари я наполнял сам по мере изучения языка, а не брал готовые.

Ценность для запоминания очень большая. Слова запоминаются очень быстро. Естественно, если не попробовать и бросить, а регулярно и целенаправленно пользоваться.

anonymous
()

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

anonymous
()
Ответ на: комментарий от yacuken

Так указатели в c++ - наследие си. Так что если не понял в полюсах, не поймешь и в сишечке.

anonymous
()
Ответ на: комментарий от UVV

Ты, наверное, про anki?
Взлетает, если самому заполнять. Или использовать карточки с контекстом.

anonymous
()
Ответ на: комментарий от anonymous

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

UVV ★★★★★
()
Ответ на: комментарий от UVV

Делаю так же. Записываю их в anki.
По выходу с рабства синхронизирую. Дома повторяю. Что бы то не было, сейчас ничего не блокирует, всё цивильно.

anonymous
()

Выше правильно написали, начинай с Си. Желательно еще и по книге K&R, там про указатели очень хорошо рассказано.

kravich ★★★★
()

Не вброса или холивара ради. Это крик души (:
Пытаюсь изучить плюсы.

Зачем?

slackwarrior ★★★★★
()

Попробуй реализовать структуру данных - двунаправленно-связаный список. Посмотри как это делают другие. Думаю после этого многое прояснишь.

m0rph ★★★★★
()
Ответ на: комментарий от staseg

Во-первых, смартпоинтеры — лишь примитивная сборка мусора, не касающая логики взаимодействия с указателями.

Понятие владения ещё как касается логики взаимодействия с указателями. Объект, на который у нас есть указатель, либо надо уничтожить, когда он перестал быть нужным, либо его надо оставить в живых при некоторых условиях.

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

Бог дал им RAII и пригрозил исключениями, а они продолжают писать freeResources() методы и delete.

ilammy ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.