Другие языки программирования и технологии
Могу ли я помочь другу с С, если я знаю С++?
Мой друг новый в програмировании, а я немного разбираюсь в С++. Ему надо учить С. Могу ли я ему помочь в этом, хоть я никогда С и не учил, а только С++? Если да, то на что обратить внимание когда буду ему помогать, например чтобы я бы его не научил лишнему?
Различие 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) и структура, описываю
В 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) и структура, описываю
Паша Маньков
Все не уместилось. Посмотри в источнике
Наверное нет. Если бы ты имел хотя бы общее представление о С++ ты бы знал, что С его составная часть. Судя по твоему вопросу С++ ты даже не видел
C++ включает в себя C (за исключением последнего стандарта и нескольких тонких моментов). Так что всё зависит от того какие части C++ вы знаете. Если это общие для C++ и C части, то помочь сможете, если нет то нет.
Как говорил персонаж Мольера - оказывается я говорю прозой! Так и любой кто понимает С++ знает, что в нем из С)). А научить чему то лишнему вы никого не сможете.
Если реально умеете писать программы на С++, то при необходимости можете научиться делать это и на любом другом языке - и помочь другу.
если ты умеешь программировать, а он нет - то сможешь объяснить принципы составления программ, алгоритмы и т. п.
судя по вопросу вы и себе не поможете в С++
Все языки друг на друга похожи, выполняют одни и теже функции но есть свои особенности.
C немного труднее чем C++. Тут главное понять все это, а особенности сами выучатся.
C немного труднее чем C++. Тут главное понять все это, а особенности сами выучатся.
Похожие вопросы
- Не могу смонтировать образ. Помогите идиоту.
- Помогите срочно!!!!Только без шуточек! Не знаешь - не пиши!!!
- Всем доброй ночи. Не могли бы немного помочь чайнику? Как и посредством чего можно сохранять анимированные
- помогите решить задачу по паскалю не знаю как делать вообще
- Народ помогите пожалуйста, нашел код но не знаю как он работает! если можно на каждом строке напишите коммы заранее спс
- Товарищи, залип на Си. Не могу найти косяк, помогите плиз.
- Помогите пож. что с компом? кто знает
- Помогите Пожалуйста....не могу настроить сеть между 2-я компютерами... очень прошу кто шарит загляньте...
- Люди, знающие SQL, помогите сделать запрос.
- Не могу создать сайт, когда присутствуют знания, помогите советом, опытом и исправлением меня и моей логики