Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/64: Рейтинг темы: голосов - 64, средняя оценка - 4.53
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759

Обучение C++ (первый язык)

14.08.2022, 20:14. Показов 13870. Ответов 146

Студворк — интернет-сервис помощи студентам
C++ как первый язык программирования.

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

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

В новом С++ где ни ткнешь, обширная библиотека шаблонов, абстракций и т.д.
Чрезвычайно полезная для разработки больших проектов, но трудная для подъема новичком (ИМО).

Например, попробуйте написать программу "echo" на C++, используя только ++ные концепции недавнего стандарта.

Вместо
C
1
2
3
for( int i = 1 ; i < argc ; ++i )
    printf( (i == 1) ? "%s" : " %s", argv[i] );
puts( "" );
Получается куча кода, несчетное число реаллокаций памяти и раздутый исполняемый файл.
А анализ производительности? Конкатенация строк через алгоритм:aggregate или алгоритм:stringstream?

Слишком много для начинающего. А начинать с верхних концепций (наследование, шаблоны, итераторы) и полностью обойти вниманием внутреннюю кухню - это выучить еще одного индусоподобного "программиста".

Если кто-то успшешно учил других C++ как первому языку, поделитесь подходом пожалуйста.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.08.2022, 20:14
Ответы с готовыми решениями:

Первый язык программирования на подходе к С++: Паскаль или С?
Привет всем) Думаю что похожие темы уже были. Я решил изучать программирование.Начал с Паскаля но хочу взять за основу C++. И недавно...

Первый язык программирования
Я являюсь студентом первого курса политехнического колледжа, специальности Информационные системы. Мы только начали изучать основы...

Kotlin - как первый язык?
Здравствуйте! Седина в бороду - бес в ребро: хочу попробовать выучить язык. Фактически первый (если не учитывать Basic 30 лет назад в...

146
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.08.2022, 18:32
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от eva2326 Посмотреть сообщение
Сишка - фундамент языка с++.
В большинстве книг для новичков, обучение начинается с сишной основы.
Вы также заблуждаетесь на счет С++.
Массивы, структуры, и много базовых вещей, либо нет в С++, либо они другие, либо их нет в С (например ссылки, перегрузка функций ...).
И если взять хотя бы стандарт С++20, он еще дальше от С, но тот же С++.

То есть, Сишнику, при переходе на С++ все равно придется изучить все основы языка, если этого не сделать, будет ходить спотыкаться, шататься от одной стенки к другой, потому что разница есть, и она ощутима. (базовые средства ЯП "С" и "С++").
То что ему будет легче чем с нуля, хм, я в этом сомневаюсь, поначалу будет даже тяжелей. И это каждый раз видно когда С-ишники с наскоку хотят перейти на С++.
0
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
15.08.2022, 18:47
Цитата Сообщение от SmallEvil Посмотреть сообщение
Массивы, структуры, и много базовых вещей, либо нет в С++
Это что ещё за бред?

Цитата Сообщение от SmallEvil Посмотреть сообщение
И если взять хотя бы стандарт С++20, он еще дальше от С
У него точно такая же сишная основа, как, например, у с++11

Цитата Сообщение от SmallEvil Посмотреть сообщение
Сишнику, при переходе на С++ все равно придется изучить все основы языка
Какие такие все основы языка ему придется изучить?
Ему придется изучить понятие "указателя" ?
Или может быть понятие "массива" ?
Или может быть конструкцию if ? Или switch-case ?

Одно из двух: либо выше перечисленное не является основами, либо вы заявляете чушь.

Сишнику придется доучиваться - выучить принципиально новые для него понятия.
А вот учить заново, да ещё и все основы, как вы заявляете, не придется.
Потому что у с++ основа языка точно такая же, как и у языка си.
0
фрилансер
 Аватар для Алексей1153
6495 / 5724 / 1133
Регистрация: 11.10.2019
Сообщений: 15,286
15.08.2022, 18:55
eva2326, "учить указатели" (странное словосочетание, хех) не придётся. Английский алфавит учить - не придётся. Арабские цифры - не придётся. Язык - придётся

Добавлено через 46 секунд
а ещё придётся искоренять гору кривых привычек, унаследованных от лежания в Си
1
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
15.08.2022, 18:58
Цитата Сообщение от Алексей1153 Посмотреть сообщение
не придётся
Вы по прежнему не ответили на вопрос.
Что именно придется учить заново?

Цитата Сообщение от Алексей1153 Посмотреть сообщение
а ещё придётся искоренять гору кривых привычек, унаследованн­ых от лежания в Си
Например?
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
15.08.2022, 19:01
Цитата Сообщение от QueryMonkey Посмотреть сообщение
Может, так?

for( auto s : vector<string>(argv+1,argv+argc) )
    cout << " " << s; // не придумал критерий для пропуска первого разделителя
C++
1
2
3
    for(const auto& s : std::vector<std::string_view>(argv + 1, argv + argc))
    {   std::cout << s << (s.data() != *(argv  + argc - 1) ?    ","  :  "" );
    }
если уж есть маниакальное желание чтобы работало как можно быстрее, то такой вар:
C++
1
2
3
4
5
    if(argc > 1) 
 
    for(const auto& s : std::vector<std::string_view>(argv + 1, argv + argc-1))
    {   std::cout << s  << ","   ;
    }   std::cout << argv[argc-1];
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
15.08.2022, 19:01
---
0
фрилансер
 Аватар для Алексей1153
6495 / 5724 / 1133
Регистрация: 11.10.2019
Сообщений: 15,286
15.08.2022, 19:06
Цитата Сообщение от eva2326 Посмотреть сообщение
заново
хорошо, я неправильно употребил слово
Не "заново", а просто "учить". Придётся учить другой язык
0
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
15.08.2022, 19:15
Цитата Сообщение от Алексей1153 Посмотреть сообщение
хорошо, я неправильно употребил слово
Не "заново"­, а просто "учить". Придётся учить другой язык
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.08.2022, 19:17
Цитата Сообщение от eva2326 Посмотреть сообщение
Потому что у с++ основа языка точно такая же, как и у языка си.
То что вы так пишите говорит лишь о том что вы плохо знаете С и/или С++.
Или что более вероятно, вообще неправильно употребляете слова "основы С".

Мне тут каждый пример приводить который вспомню ?
Сишных структур нет в С++. Инициализация объектов другая в С++.
Ссылок нет в С. Перегрузок нет в С. это базовые вещи.
Указатели имеют расширенный функционал в С++ в механизме полиморфизма.
И так можно долго перечислять.

А что делать с теми моментами что не вспомню или не знаю ? Я на Си не кодил. Но сталкивался.
0
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
15.08.2022, 19:55
Цитата Сообщение от SmallEvil Посмотреть сообщение
То что вы так пишите говорит лишь о том что вы плохо знаете С и/или С++.
Давайте проверим:

Цитата Сообщение от SmallEvil Посмотреть сообщение
Сишных структур нет в С++.
В чем отличие сишной структуры от структуры с++ ?

Не надо писать о том, что в с++ ключевое слово struct денотирует класс.
Я спрашиваю об отличиях с практической точки зрения.

Внимательно посмотрите на эти две структуры, и назовите отличия:
C
1
struct example { int a; int b; };
C++
1
struct example { int a; int b; };
Цитата Сообщение от SmallEvil Посмотреть сообщение
Инициализаци­я объектов другая в С++.
Она не "другая", она "многообразнее"
с++ предоставляет больше способов инициализации.

Но может быть я просто плохо знаю с++?
Объясните пожалуйста, чем инициализация в стиле си на языке с++ отличается от точно такой же на языке си?

Например:
C
1
int arr[] = {1,2,3};
C++
1
int arr[] = {1,2,3};
Или может быть это вы плохо знаете с/с++ ?

Цитата Сообщение от SmallEvil Посмотреть сообщение
Ссылок нет в С. Перегрузок нет в С. это базовые вещи.
Это базовые вещи языка с++.

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

Цитата Сообщение от SmallEvil Посмотреть сообщение
Сишнику, при переходе на С++ все равно придется изучить все основы языка
А теперь выясняется что не все, а только те вещи, которые привнес язык с++.
Получается, ваше заявление - чушь.

Цитата Сообщение от SmallEvil Посмотреть сообщение
Указатели имеют расширенный функционал в С++ в механизме полиморфизма­.
Это что ещё за бред?
Я уже начинаю сомневаться, что вы знаете язык с++

Вам показать как устроен полиморфизм на низком уровне?
На языке си удобно иллюстрировать принцип работы.

Цитата Сообщение от SmallEvil Посмотреть сообщение
А что делать с теми моментами что не вспомню или не знаю ?
Если вас это заботит, посмотрите в сторону повышения квалификации.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.08.2022, 20:27

Не по теме:

eva2326, понятно очередной тролль от спячки проснулся.


Все что выше написано можно приписать любому Си подобному ЯП.
То есть это вы пишете какое то частное сравнение отдельных лексем языка.
Сравнивая зеленое с круглым. Удачи вам в вашем заблуждении.
Про некоторую обратную совместимость с языком С в С++ знают все, кроме вас, у вас С++ это надстройка над Си.
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
15.08.2022, 20:42
Цитата Сообщение от eva2326 Посмотреть сообщение
посмотрите в сторону повышения квалификации­.
посоны, во тут какая тема:
Школа Алисы

мош, кто уже пробовал делать?

гуглил либу огла c glsl 1.20 под C# и оно вылезло.

а чо, подумал, надо бы заколбасить навык для Алисы.

сразу говорю, ничего изучать там не собираюсь,
если решусь, то просто возьму и заколбашу.
0
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
15.08.2022, 20:50
Цитата Сообщение от SmallEvil Посмотреть сообщение
понятно очередной тролль от спячки проснулся.
Понятно. Аргументы кончились, начался переход на личность.

Цитата Сообщение от SmallEvil Посмотреть сообщение
Все что выше написано можно приписать любому Си подобному ЯП.
В смысле всё?
У вас какой то юношский максимализм, как у прыщавого подростка.
Вы - девственник?

Цитата Сообщение от SmallEvil Посмотреть сообщение
То есть это вы пишете какое то частное сравнение отдельных лексем языка.
Я не пишу ни о каком частном сравнении отдельных лексем.
Не надо выдумывать.

Цитата Сообщение от SmallEvil Посмотреть сообщение
Про некоторую обратную совместимост­ь с языком С в С++ знают все, кроме вас
Это - троллинг такой? Или просто тупость?
0
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
16.08.2022, 00:37  [ТС]
Интересно у вас.

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

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

За мелкими исключениями, сишные исходники закомпилируются под С++ и будут правильно работать.
И, по принципу Стротрупа, с такой же скоростью.

С++ немного расширяет фундамент (больше встроенных типов), но все остальное - это постройка вверх, в сторону абстракций и ОО.
0
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
16.08.2022, 01:48
Цитата Сообщение от QueryMonkey Посмотреть сообщение
С++ немного расширяет фундамент (больше встроенных типов), но все остальное - это постройка вверх, в сторону абстракций и ОО.
Ну нет жеж.

"Надстройка" - расширение функциональности языка за счет самого языка.
Например, библиотека boost расширяет возможности с++ при помощи возможностей самого с++
Или например, GTK+ - образец ООП-надстройки на языке си.

Но вот в том, что касается с++, то его ООП уже не является надстройкой, а встроено в ядро языка.
Фундамент с++ не немного, а очень даже значительно шире, чем в си.
Помимо сишной базовой части, в его фундамент так же входит объектно ориентированная (классы), и функциональная (шаблоны) парадигмы.
Поэтому с++ и называют "мультипарадигменным".


А если вооружиться препроцессором и шаблонами, то несложно накрутить ещё и декларативную надстройку.
0
Нарушитель
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,218
16.08.2022, 02:06
Лазиешь по сети, по каким то example в фрамеворках. по Stack Overflow.
По msdn от майкрософт...
Везде пишут на смеси си с плюсами.
Я читал это читал, и оказалось, знаю на троечку и то и другое.
Правда плохо отличаю...

Добавлено через 9 минут
Цитата Сообщение от eva2326 Посмотреть сообщение
Поэтому с++ и называют "мультипарадигменным".
Собираються куча мужиков и решает, как же вывести очередную парадигму.
Я спрашиваю, а зачем? Я например ни чего не понимаю.
Мне отвечают - А это такой паттерн, он тебе ни когда не понадобиться...
(типа ни кому ни на хто не нужен)

Добавлено через 7 минут
Скока лазил по сети? Лет восемь.
0
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
16.08.2022, 02:08  [ТС]
eva2326, я думаю что я понимаю ваш довод, но вижу вещи иначе.
Для меня цокольный этаж с бойлерной - это все равно надстройка над фундаментом. Новый функционал, который выше, а не шире в области абстракции.

Лично я не нахожу слово "надстройка" зазорной. Люди видят и пользуются надстройкой, но в случае с С++, мне кажется они также должны разбираться в устройстве фундамента, потому что не зная про vtable трудно понять как работает dynamic_cast, а верить в "магию языка" это не по-программистски.

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

Если после прочтения книги "Эффективный C++" я изменю мнение, отпишусь здесь.
0
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
16.08.2022, 02:40
Цитата Сообщение от QueryMonkey Посмотреть сообщение
функционал
функциональность.
пишите грамотно
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6312 / 3035 / 1053
Регистрация: 01.06.2021
Сообщений: 11,524
17.08.2022, 10:55
Цитата Сообщение от eva2326 Посмотреть сообщение
int arr[] = {1,2,3};
в Java тоже так можно (хотя, не принято) писать

Java
1
2
3
4
5
6
7
8
9
import java.util.Arrays;
 
public class Main
{
    public static void main(String[] args) {
        int arr[] = {1,2,3};
        System.out.println(Arrays.toString(arr));
    }
}
Теперь мне скакать и рассказывать, что Java и C++ это одно и то же
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
17.08.2022, 12:18
Royal_X, ну в этой теме у вас два варианта.
1) Java и C++ это одно и то же
2) Java это надстройка над C++
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.08.2022, 12:18

C# как первый язык программирования
Добрый день. Решил изучить язык C# для начала, а потом и ASP.NET для трудоустройства. Раньше в институте изучал Delphi и С, но очень...

Первый/основной язык программирования
Первый/основной язык программирования как концепт учебного процесса с целью импортозамещения ПО. Название темы немного мудрёное....

JavaScript как первый язык
Здравствуйте. Я решил начать изучать программирование, одно время сделал свой выбор на языке Python, но он мне ? показался несколько...

Питон, как первый язык программирования
питон как первый язык программирования пойдёт ли ?

Python для первой работы, но не первый язык
Всем доброго времени суток! Мне 20 лет, живу в Москве, занимаюсь интернет-маркетингом и параллельно учусь в ВУЗе на заочке на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru