LINUX.ORG.RU

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

 , , ,


2

2

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

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

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

указатели на объекты в стеке уже отменили?

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

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

Ну, мы тоже видели. Берёшь на джуниора, по ходу обучаешь.

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

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

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

Он намекнул, что языки разные, а не то, что нанимаемые не знают ничего.

UVV ★★★★★
()

никто не понимает, смирись с этим.

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

welcome to the club.

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

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

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

поскольку язык С++ это три в одном:
1. Язык Си, с отличиями от C99
2. Язык классов и объектов
3. Язык шаблонов

то примеры, этюды, задачи должны демонстрировать следующее:

1. Отличия языка 1 от стандарта C99: ссылки, и т.п.
2. Основные концепции классов и объектов, на примере других концепций классов и объектов: виртуальные и финальные и/или sealed методы, виртуальная таблица методов и интерфейсы, указатели на метод класса, делегаты в С++, лямбды в С++11
мультиметоды, комбинаторы методов,метаобъектный протокол, интерфейсы и метаобъектный протокол, протоколы и категории в Objective C, метаобъектный компилятор в Qt — требования к возможностям и необходимость оного, способы реализации moc
миксины и трейты, функторы, аспекты и аспектно-ориентированное программирование, субъекты и субъектно-ориентированное программирование, слои в слоистой архитектуре приложения, динамическая диспетчеризация в статически типизированном языке.
Примеры должны показывать, как это делается в разных языках, и где объектная модель с++ вызывает неудобства и затруднения.
Примеры: сериализация объектов, многопоточное программирование, контроль ресурсов (RAII), паттерны проектирования
3. Элементарные понятия, семантика и нотация языка шаблонов. Связь с функциональным программированием. Ограничения языка шаблонов. Метапрограммирование времени компиляции. Аннотации методов, трейты, тайпинфро времени компиляции. Объектно-ориентированные базы данных на С++. Персистентные объекты в С++. Многопоточность, иммутабельность, конкурентность и механизмы языка для контролирования этого.
Связь языка 3 с языками 1, 2 — где язык 3 применять надо и где не надо.
Узкие места языка 3, способы их оптимизации.

anonymous
()

Что конкретно ты не понимаешь с указателями? Если как их читать, то тут все просто: от имени переменной до типа. С ссылками так же

int *a - указатель на int(например динамический массив)
int *&a - ссылка на указатель на int(некоторые извращенцы используют)
int &*a - так нельзя, поскольку ссылка - плюсовый костыль.
int **a - указатель на указатель на int(например двумерный динамический массив)
int (*a)[8] - указатель на массив на 8 интов
int (*a)(int) - указатель на функцию, которая принимает int и возвращает int
что бы указать тип для приведения, убери «a» например
...
void *ref = ...
void (*foo)() = void(*)() ref;
foo();
...
ничего сложного, в принципе.

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

тебе надо вон из профессии

Ну зачем же так сурово? Может, чуваку нужно начать с начала, с каких-нить моделей памяти etc, а уж потом подползать с плюсам.

Deleted
()

А вот ты прикинь что есть люди которые возятся в когомологиях на кольцах.

Absurd ★★★
()

блин, ну чем там с указателями на первых курсах людей мучают? Двоичное дерево, связный список. Вот и пиши.

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

там речь идет о указателях. кто не понимает указатели - ему делать нечего в девелопменте для существующих устройств.

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

Да не в устройствах даже дело. Концепция указателей можно понимать и без привязыки к железу. Это объект, значением которого является «ссылка» на другой объект. А если уж говорить о крестах, то там итераторы фактически обобщают понятие указателей.

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

Прозрачно же. Достаточно знать, что поменяется, если поменять.

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

С жабой я уже поработал. Решил изучить ещё что-то.

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

Нихера не надо учить, надо сразу задачу решать. Если задачу не можешь найти, пиши рогалик.

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

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

Дважды плюсую двусвязный список! Или хотя бы односвязный...

AIv ★★★★★
()

В плюсах тебе говно указатели не нужны. Только ссылки и то только в аргументах функций. А вместо указателей только умные unique_ptr/shared_ptr, где никаких звёзд и сисек нет.

slovazap ★★★★★
()

Я думаю, что программирование не твоё.

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

У него проблемы с пониманием сишных плюшек.

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

В С++ есть лишняя сущность — ссылки, которая сбивает с толку.

PolarFox ★★★★★
()
int a = 15;
int *p = &a;
cout << p;

Из этого, тебе больше всего непонятны указатели?

Kuzy ★★★
()

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

w1nner ★★★★★
()

берешь книженцию K&R, гугл и gnu hurd. пытаешься портировать на SuperH 64. всему научишься. плюс необыкновенные ощущения за счет фирмы =)

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

На подходе. Но стиль изложения уже нравится.

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

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

Такая же фигня с физикой всю жизнь была

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

ну да. Если не знаете, что написать на новом языке - сделайте что-то для себя. А поскольку Вы - повар, то Вы точно знаете, как должна выглядеть поваренная книга (электронная). Вот и сделайте ее!

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

Можно собрать дерево с одинаковой длинной ветвей на шаблонах, это будет массив (даже многомерный), и там не будет указателей (звездочек этих всех).

Не делайте из указателей культа!

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

А кто делает из них культ? Их просто нужно понимать=)

forCe
()
Ответ на: комментарий от anonymous
#include <stdio.h>

template <typename T, int R> struct lrCube{
	lrCube<T,R-1> a, b;

	int size() const { return 1<<R; }
	T get(int i) const { return (i&1 ? b:a).get(i>>1); }
	void set(int i, T x){ (i&1 ? b:a).set(i>>1, x); }
};

template <typename T> struct lrCube <T, 0>{
	T x;

	int size() const { return 1; }
	T get(int i) const { return x; }
	void set(int i, T x_){ x = x_; }
};

int main(){
	lrCube<int, 4> arr;
	for(int i=0; i<arr.size(); i++) arr.set(i, i*i);
	for(int i=0; i<arr.size(); i++) printf("%i %i\n", i, arr.get(i));
}

Многомерный случай делается аналогично.

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

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

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

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

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

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

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

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

Резюме - не самое страшное. Хуже, когда после такого восприятия люди пытаются все строки загнать в char*, а в ответ на предложение заменить в аргументах некоей функции T* на const T& (я не о тех случаях, где T* действительно нужен) смотрят на тебя с искренним недоумением.

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

структура использующаяся в боевом коде

И какие у нее приемущества по сравнению с обыкновенным массивом? Зачем ее использовать?

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