Заметки по языку C++
Язык программирования С++ произошёл от Си.
Поддерживает разные парадигмы программирования, но, в сравнении с его предшественником — языком Си, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования. Однако в дальнейшем Си и C++ развивались независимо, что привело к росту несовместимостей между ними. При создании C++ стремились сохранить совместимость с языком Си. Большинство программ на Си будут исправно работать и с компилятором C++. C++ имеет синтаксис, основанный на синтаксисе Си. Последняя редакция Си, С99, добавила в язык несколько конфликтующих с С++ особенностей. Эти различия затрудняют написание программ и библиотек, которые могли бы нормально компилироваться и работать одинаково в компиляторах Си и C++, что, конечно, запутывает тех, кто программирует на обоих языках.
Курсы для изучения C++
Язык С и его производные один из самых востребованных и высокооплачиваемых языков программирования.
C++ Developer. Professional Разработчик С++ (Углубленный уровень) Пройти тестирование на знание языка С++.
Бьёрн Строуструп, придумавший C++, неоднократно выступал за максимальное сокращение различий между Си и C++ для создания максимальной совместимости между этими языками. Противники же такой точки зрения считают, что так как Си и C++ являются двумя различными языками, то и совместимость между ними не так важна, хоть и полезна. Согласно этому лагерю, усилия по уменьшению несовместимости между ними не должны препятствовать попыткам улучшения каждого языка в отдельности. Бьёрн Страуструп, Бьярне Строуструп (дат. Bjarne Stroustrup произношение род. 11 июня 1950 (по другим сведениям, 30 декабря), Орхус, Дания) - автор языка программирования C++.
- Системы исчисления: двоичная, восьмеричная, десятичная, шестнадцатеричная.
- Структура программы на языке С++. Разнесение проекта на несколько файлов: директива Препроцессора #include и заголовочный файлы.
- Типы данных CPP. Таблица ASCII: Расшифровка аббревиатуры, история и применение. Escape-последовательности-последовательности.
- Преобразование типов в стиле С: Преобразование типов в стиле С++. RTTI
- Перечисляемые типы в С++ enum.
- Тип данных Типы struct, union и enum в C++. Объединения union. Битовые поля C++.
- Побитовые или поразрядные операции: &, |, ^, ~. Значение старшего, младшего слова(2 байта).
- Операторы С++: унарные (инкремент и декремент), бинарные (Деление по модулю (вычисление остатка от деления)), тернарные.
- Логические операции в языке C++: &&, ||, >,< и т.д.
- if - else: Конструкция логического выбора if else
- switch case:Структура множественного выбора switch C++
- Циклы С++: while, do while, for.
- Массивы. Двумерные массивы (матрицы). Многомерные динамические массивы.
- Память:
- Статическая память - это область хранения всех глобальных и статических переменных. Переменные статической памяти объявляются лишь единожды и уничтожаются по завершении программы.
- Динамическая память куча (англ. heap) или память свободного хранения.
- Операция Операция sizeof.
- Операторы динамического распределения памяти С++: new(), delete(); malloc(), free().
- Строки в С++. Строковые массивы. Библиотека обработки строк Библиотека обработки строк string.h. Примеры: Конкатенация строк, Поиск символов.
- void или int объявление главной функции программы.
- Стандартная библиотека С++. Библиотеки стандартных классов обычно поставляются производителями компиляторов. Многие библиотеки классов для специальных применения поставляются независимыми производителями программного обеспечения.
- Что такое Socket (Сокет) в сетевом программировании - сетевое программирование.
- Примеры работы с файлами на С, С++. Определение понятия файл. Функции для работы с файлами. Функции для работы с директориями.
ОПП
- ОПП
- Три самых важных свойства Три свойства ООП Объектно-ориентированное программирование: Что такое Инкапсуляция в программировании, Наследование, Полиморфизм.
- Определение класса в языке C++ и создание его объекта. Константный метод. Операторы . :: →
- Статические члены класса.. Счетчик объектов класса. Статические методы класса.
-
-
- druzhestvennye_funkcii_klassy._druzhestvennaja_peregruzka Глобальная перегрузка. Перегрузка ввода/вывода данных.
- smart pointer c++ пример реализации понятие "умного" указателя.
- Динамические структуры данных: Стек С/C++, Простая очередь, Кольцевая очередь, Очередь с приоритетом C++, C# (си шарп), Бинарное дерево С++.
-
- Шаблон Шаблон Синглетон (Singleton pattern) - гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.
Библиотеки C++
- Библиотека Шаблоны STL: vector, map, string, list и т.д.
- Библиотека Boost библиотека C++
- Библиотека POCO (или C++ Portable Components)
Функции
- Введение в Введение в функции языка C++ (оператор return). Передача аргументов по значению, по указателю, по ссылке.
- Встраивание функций (inline, макросы #define).
-
- сout ввод вывода C++ - вывод данных на консоль. Форматирование ввода-вывода средствами языка С++.
- Пример Оператор ввода cin в языке Си/C++ - ввод данных с консоли.
- math.h: Для возведения в степень используется функция pow(double num,double exp), где num это число для возведения в степень, а exp - сама степень.
- Для извлечения корня квадратного используется функция sqrt(double num), где num это число из которого извлекают корень.
- rand генератор случайных чисел - генератор случайных чисел.
- qsort - функция реализующая алгоритм "Быстрая сортировка" массива.
Передача параметров
Передать аргументы функции в С++ можно тремя сопособами: передача по значению, передача по ссылке(Ссылка) и передача по указателю(Указатели в C++).
- Передача по значению: Когда аргумент передается по значению, создается копия аргумента, и последняя передается (через Стек С/C++ вызовов) вызываемой функции. Изменение копии не влияют на значение исходной переменной вызывающего. После того как функция завершается, копия уничтожается. Это предотвращает случайные побочные эффекты, препятствующие разработке корректных и надежных программных систем.
- Передача по ссылке(Ссылка):
- Передача по указателю(Указатели в C++):
Передача по значению | Передача по ссылке(Ссылка) | Передача по указателю(Указатели в C++) в случае динамического массива | |
Переменная | #include <iostream> /* * передача по значению */ using namespace std; int ByValue( int ); //прототип (передача по значению) int main() { int x=2; cout<<"x = "<<ByValue(x)<<endl; return 0; } int ByValue (int number) { return number*=number;// аргумент вызывающего не изменяется } | #include <iostream> /* * передача по ссылке */ using namespace std; void ByReference( int & ); //прототип (передача по ссылке) int main() { int x=4; cout<<"x = "<<x<<endl; ByReference(x); cout<<"x = "<<x<<endl; return 0; } void ByReference (int &numberRef) { numberRef*=numberRef;// аргумент вызывающего модицируется } | |
Одномерный Массив | В С++ массивы автоматически передаются по ссылке, а не по значению. Но для отдельных элементов массива нужно явным образом применять & иначе будет передаваться по значению, а не по ссылке. То есть нужно различать способ передачи массива целиком и его элементов. | #include <iostream> /* * передача по ссылке */ using namespace std; void modifyArray( int [], int ); //прототип передачи по ссылке void modifyElement( int ); //прототип передачи по значению элемента массива void modifyElementRef( int &); //прототип передачи по ссылке элемента массива int main() { const int arraySize = 5; int arr[arraySize] = {0,1,2,3,4}; //инициализация массива //передать массив arr в modifyArray по ссылке. передать размер массива. modifyArray( arr, arraySize); for (int j=0;j < arraySize;j++) cout<<arr[j]; cout<<"\n"; modifyElement( arr[3]); modifyElementRef( arr[3]); for (int j=0;j < arraySize;j++) cout<<arr[j]; cout<<"\n"; return 0; } //b указывает в памяти на исходный массив arr void modifyArray (int b[], int sizeOfArray) { //умножить каждый эелемент массива на 2 for (int k=0;k < sizeOfArray;k++) b[k]*=2; } void modifyElement( int e) {//e является локльной копией элемента массива arr[3] //умножить параметр на 2 cout<<(e*=2)<<endl; } void modifyElementRef( int &eRef) {//eRef является ссылкой на элемент массива arr[3] //умножить параметр на 2 eRef*=2; } | |
Двумерный Массив (матрица) | #include <iostream> /* * передача по ссылке двумерного массива */ using namespace std; const int row = 2, col =3;//описание размерности массива void printArray( int [][col]); //прототип передачи по ссылке для двумерного массива int main() { int arr1[2][3] = {0,1,2,3,4}; //инициализация массива //передать массив arr1 в printArray по ссылке printArray( arr1); return 0; } void printArray (int a[][col]) { //вывести элементы массива for (int r=0;r < 2;r++){ for (int c=0;c < col;c++) cout<<a[r][c]; } } |
Принцип наименьших привилегий
- Принцип наименьших привилегий:
- Функциям не следует предоставлять возможность модифицирования массивов, если это не является совершенно необходимым. Используйте квалификатор const.
- Передавайте аргументы по значению, если только вызывающая функция явно не требует, чтобы значения ее переменных, передаваемых вызываемой функции, модифицировались последней.
Обработка аргументов командной строки int argc, char **argv
- int argc - в данный параметр записывается значение, равное количеству аргументов командной строки.
- char *argv[] - массив строк, в который помещаются непосредственно значения аргументов командной строки. Первый параметр argv[0] в массиве указателей argv - название программы.
Листинг на языке C++
//Код C++ for (int i=0;i<argc;i++, *argv++){ cout<<*argv<<"\n"; }; //OR for (int i=0;i<argc;i++){ cout<<argv[i]<<'\n'; if(strcmp(argv[i],"-kk")==0) cout<<"-kk key ";//обработка ключа };
Листинг на языке C
//Код C #include <stdio.h> int main( int argc, char ** argv ){ while ( argc-- ) printf("%s\n", *argv++); return 0; }
#include <stdio.h> int main(int argc, char *argv[]){ int i=0; for (i=0;i<argc;i++){ printf("Argument %d: %s\n",i,argv[i]); }; };
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах