Другие языки программирования и технологии

Могу ли я помочь другу с С, если я знаю С++?

Мой друг новый в програмировании, а я немного разбираюсь в С++. Ему надо учить С. Могу ли я ему помочь в этом, хоть я никогда С и не учил, а только С++? Если да, то на что обратить внимание когда буду ему помогать, например чтобы я бы его не научил лишнему?
Различие 1. Объекты

В C++ появились классы и объекты. Технически класс C++ -это тип структуры в C, а объект - переменная такого типа. Разница только в том, что в C++ есть еще модификаторы доступа и полями могут быть не только данные, но и функции (функции-методы).

Функция-метод - это обычная функция C, у которой первый параметр - это указатель на структуру, данные которой она обрабатывает: this. Если сравнить, как выглядят функции-методы в C++ и функции с параметром-указателем на структуру в C, то мы обнаружим, что всего лишь изменилась форма записи. В C++ получается короче, так как this и имя типа во многих случаях писать не обязательно (подразумевается по умолчанию).

Модификаторы доступа - это слова public, private и protected. В C вместо них была внимательность программиста: public - значит с этими полями делаю, что хочу; private - значит к этим полям обращаюсь только с помощью методов этой структуры; protected - то же, что public, но еще можно обращаться из методов унаследованных структур (см. следующий пункт).

Различие 2. Наследование

То, что в C++ -наследование, в C - это просто структура в структуре. При программировании в стиле C++ применяются такие красивые и звучные слова, как "класс Circle порожден от класса Point" или "класс Point наследуется от класса Circle и является производным от него". На практике все это словоблудие заключается в том, что структура Point - это первое поле структуры Circle.

При этом реальных усовершенствований два. Первое - поля Point считаются так же и полями Circle, в результате доступ к ним записывается короче, чем в C. Второе - в обоих структурах можно иметь функции-методы, у которых имена совпадают с точностью до имени структуры. Например, Point::paint и Circle::paint . Следствие - не надо изобретать имена вроде Point_paint и Circle_paint, как это было в C, а префиксы Point:: и Circle:: в большинстве случаев можно опускать.

Различие 3. new и delete

В C++ появились две новые операции: new и delete. В первую очередь это - сокращения для распространенных вызовов функций malloc и free:

В стиле C:

Point *p = (Point*) malloc(sizeof(Point));
free(p);

В стиле C++:

Point *p = new Point;
delete p;

При вызове new автоматически вызывается конструктор, а при вызове delete - деструктор (см. следующий пункт). Так что нововведение можно описать формулой: new = malloc + конструктор, delete = free + деструктор.

Различие 4. Конструкторы и деструкторы

Когда программируешь в стиле C, после того, как завел новую переменную типа структуры, часто надо ее инициализировать и об этом легко забыть. А перед тем как такая структура закончит свое существование, надо ее почистить, если там внутри есть ссылки на какие-то ресурсы. Опять-таки легко забыть.

В C++ появились функции, которые вызываются автоматически после создания переменной структуры (конструкторы) и перед ее уничтожением (деструкторы). Во всех остальных отношениях это - обычные функции, на которые наложен ряд ограничений. Некоторые из этих ограничений ничем не оправданы и мешают: например, конструктор нельзя вызвать напрямую (дестркутор, к счастью, можно). Нельзя вернуть из конструктора или деструктора значение. Что особенно неприятно для конструктора. А деструктору нельзя задать параметры.

Различие 5. Виртуальные функции

Из всех усовершенствований это вызывает наибольшую "щенячью радость". Как обычно, придуманы и звучно-научно-рекламные названия: "полиморфизм", "виртуальный", "абстрактный". Если отбросить разницу в терминологии, то что получим в сухом остатке? А получим мы очередное сокращение записи. И очень большое сокращение.

При программировании на C часто бывает так, что имеется несколько вариантов одной и той же структуры, для которых есть аналогичные функции. Например, есть структура, описывающая точку (Point) и структура, описываю
Паша Маньков
Паша Маньков
140
Лучший ответ
Паша Маньков Все не уместилось. Посмотри в источнике
Наверное нет. Если бы ты имел хотя бы общее представление о С++ ты бы знал, что С его составная часть. Судя по твоему вопросу С++ ты даже не видел
Сергей Гогин
Сергей Гогин
68 014
C++ включает в себя C (за исключением последнего стандарта и нескольких тонких моментов). Так что всё зависит от того какие части C++ вы знаете. Если это общие для C++ и C части, то помочь сможете, если нет то нет.
Amir Abduvapov
Amir Abduvapov
46 815
Как говорил персонаж Мольера - оказывается я говорю прозой! Так и любой кто понимает С++ знает, что в нем из С)). А научить чему то лишнему вы никого не сможете.
Если реально умеете писать программы на С++, то при необходимости можете научиться делать это и на любом другом языке - и помочь другу.
если ты умеешь программировать, а он нет - то сможешь объяснить принципы составления программ, алгоритмы и т. п.
судя по вопросу вы и себе не поможете в С++
Все языки друг на друга похожи, выполняют одни и теже функции но есть свои особенности.
C немного труднее чем C++. Тут главное понять все это, а особенности сами выучатся.