Заметки по языку 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]); }; };
📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.
📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Nginx простые примеры конфигурации
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах
7 Самых Популярных Обзоров
- Хостинг для Python-скриптов и приложений
- ТОП 4 лучших антидетект браузеров (Бесплатные & Платные)
- Подборка купонов (промокоды) на хостинг, антидетект браузеры
- Обзор THE.Hosting (PQ Hosting): надежный хостинг с профессиональной поддержкой
- Хостинг в России
- Хостинг в Европе
- Обзор браузера Dolphin {anty} для мультиаккаунтинга