Небольшое введение и описание языков C и C++
Впервые с языком C++ я познакомился в году 2016, но по ряду причин не использовал его
Мне более интересно программирование м/к и подход c++ с высокой абстракцией от железа и зачастую «решение проблем более мощным железом» меня малость омрачал…
Также из программистов с которыми я знаком «высокоуровневые / высокоабстрагированные от железа» программисты часто задействованы в сферах маркетинга и продаж, что опять таки не очень интересно…
Но видимо пришло время вспомнить основы по С++, так как часть синтаксиса у них общая, то постараюсь расписать общие конструкции с тегом «C/C++» и темы, специфичные для C++ с тегом «C++».
Стоит оговориться, что хотя я и не фанат C++ и в работе чаще использую C и C# (на 2022 год), но многие принципы из ООП весьма логичны и удобны, и вполне применимы в «чистом Си» — так называемый «Си с классами».
Коротко и предназначении языков:
Чистый C -чаще используется в миниатюрных программах (линейных или с простой RTOS), зачастую используется в драйверах устройств, и некоторых библиотеках «высокоабстрагированных» языков
C++ является продолжением C, главные его принципы «инкапсуляция, наследование и полиморфизм» необходимы для более удобного и простого взаимодействия с данными и функциями.
Постараюсь упрощенно на примерах объяснить, что это такое:
Инкапсуляция: — это «обособление» данных и методов работы с ними
например: есть база данных с сотрудниками предприятия и мы должны выводить кол-во и искать по фамилии и ничего более.
В C++ за счет инкапсуляции можно создать класс (что-то похожее на структуру в c) и иметь внутри базу данных и функции для работы с ними.
Вне этого класса (напрямую) не получить доступ к этой базе данных.
Наследование: — это возможность копировать поля/данные и методы (способы работы с данными) от класса родителя к классу наследнику и дополнять их.
например: к предыдущему примеру с инкапсуляцией мы добавим возможность поздравлять сотрудников с днем рождения.
Это будут 2 разных класса, один выдает кол-во и ищет по фамилии, второй еще и поздравляет с днем рождения
Полиморфизм: — это способность использовать одинаковые названия для разных задач
например: напишем функцию сложения:
int16_t Sum(int8_t a, int8_t b) {return (a+b);}
В классическом C если мы захотим сложить например 2 числа типа float нам придется писать дополнительную функцию, например
double Sum_f (float a, float b) {return (a+b);}
В C++ можно добавить еще 1 функцию с таким именем и перегрузить первую, например так:
double Sum (float a, float b) {return (a+b);}
И в коде можно не задумываться о типах значений — компилятор сам подставит требуемую на основе типа передаваемых значений (и их кол-ва)
т.е. мы можем написать
//код и перегрузки
int Sum(int a, int b) {return (a+b);}
double Sum (float a, float b) {return (a+b);}
int main ()
{
//какой-то код
int d_a=2;
int d_b=2;
float f_c=1.5;
float f_d=2.1;
cout<<"Int sum= \t"<<Sum(d_a,d_b)<<endl; //просто вывод в консоль результата
cout<<"float sum= \t"<<Sum(f_c,f_d)<<endl; //просто вывод в консоль результата
return 0;
}
В результате работы такой программки в терминал выведутся:

Т.е. мы использовали одинаковое имя функции, но передали разные типы аргументов и получили разный результат.
//______________________________________________________
В дальнейшем мы постараемся подойти к классам и основным принципам C++ и рассмотреть их более подробно.