С++ основы ТИПЫ, ССЫЛКИ, КЛАССЫ, СПЕЦИАЛЬНЫЕ ФУНКЦИИ, ИНКАПСУЛЯЦИЯ,КВАЛИФИКАТОРЫ,ПРИВЕДЕНИЕ, ШАБЛОНЫ
НАЧАЛО
В 1980-х. один из сотрудников фирмы At&T Bell Labs, совместив 2 языка Symula и C, получил С . Его зовут Бьерн Страуструп.
ТИПЫ
Встроеные типы в C очень похожи на C:
символьные char, wchar_t (C 11: char16_t, char32_t)
целочисленные знаковые signed char, short int, штеlong int (C 11: long long)
целочисленные беззнаковые unsigned char, unsigned short int, unsigned int, unsigned long int (C 11: unsigned long long)
вещественные (с плавающей точкой) float, double, long double
логический bool (принимает значение false либо true)
ССЫЛКИ
Ссылка это всего-лишь еще одно имя для переменной.
До C 11 были только lvalue (Эль’Вэлью) ссылки, но после были добавлены и rvalue (Эр’Вэлью) ссылки.
Главное их различие:
lvalue - все, что имеет постоянное место в памяти (так же называют левыми - left hand side value)
rvalue - временный объект и живет до конца полного выражения (так же называют правыми - right hand side value)
На примере типа int объявляется следующим образом:
int& var_name - lvalue ссылка
int&& var_name - rvalue ссылка
Так как rvalue ссылки связываются с временным объектом, она может “провиснуть“, ее никогда нельзя возвращать, как результат из функции.
Ссылка - это не указатель, указатель имеет место в памяти, в том время, как сама ссылка, нигде не хранится. Но в некоторых случаях, неявно, она может стать указателем для передачи в функцию.
КЛАССЫ
Одной из основных задач классов является разделение ИНТЕРФЕЙСА и КОНТЕКСТА.
ИНТЕРФЕЙС - как правило, чисто абстрактный (имеет только объявление методов, но не определяет их) класс, цель которого служить шаблоном для других, более частных объектов.
КОНТЕКСТ - класс, который наследуется от интерфейса, определяя каждый метод, в котором производит проверку перед началом и в конце каждого метода на сохранение инвариантов класса.
Ярким примеров в C такого разделения есть в самой стандартной
библиотеке языка, КОНТЕЙНЕР (container) - является более общим понятием, которое описывает некий стандарт для всех дочерних объектов. А уже его реализации ВЕКТОР (vector), ЛИСТ (list) и ДЕК (deque), описывают каждый сам для себя, что будет делать каждый из методов, который продиктовал им их общий интерфейс. Эта концепция позволяет нам использовать вектор, который является динамическим массивом и лист, он же двусвязный список, как полностью взаимозаменяемые.
В C есть 3 вида классов:
класс - объявляется через ключевое слово class и является классическим классом.
структура - объявляется через ключевое слово struct, является таким же классом, но при отсутствии модификатора доступа private или public все члены будут иметь иметь public доступ, в то время как в class будет pivate.
объединение - объявляется через ключевое слово union, все поля класса будут ссылаться на один и тот же адрес в памяти, можно использовать когда нужно иметь разную по типу интерпретацию. Размер выделяемой памяти определяется по большему из них.
СПЕЦИАЛЬНЫЕ ФУНКЦИИ
Классы имеют ряд специальных функций
Конструктор по умолчанию - вызывается при создании объекта (при вызове new).
Деструктор - в момент завершения полного выражения, вызывается для уничтожения объекта.
Конструктор копирования - инициализировать объект можно и передав другой объект этого же типа, при этом в новый объект будут скопированы значения полей переданного.
Конструктор перемещения - аналогично копированию, только поля оригинального объекта будут обнулены.
Оператор присваивания копированием - оператор = для lvalue объекта.
Оператор присваивания перемещением - оператор = для rvalue объекта.
Как правило они не требуют определения, так как принцип единой ответственности (Single Responsibility Principle) гласит о том, что у каждого объекта должна быть лишь одна задача, спец. функции определяются только для тех объектов, задача которых заключается в управлении собственной памятью.
Нужно помнить правило “пяти“ - если вам нужно нетривиально определить один из них, то вам нужно определить все пять.
ВНИМАНИЕ!!! Если у Вас в классе есть хотя бы один виртуальный метод (то есть тот, который при наследовании требует переопределения - override), то вам нужно сделать и деструктор виртуальным (он может быть пустым), чтобы удалять объекты производного класса по указателю на базовый класс.
НАСЛЕДОВАНИЕ
Наследование это процесс, в результате которого, новый объект получает все поля родительских...
С поддерживает множественное наследование, то есть мы может создать новый класс, затащив в него поля сразу от 2-х и более классов предков.
ИНКАПСУЛЯЦИЯ
Инкапсуляция защищает инварианты (условия, которые выполняются все время жизни объекта) класса. То есть инкапсуляция - это про доступ к именам. Нужно запомнить три модификатора:
public - поле имеет публичный доступ на всех уровнях.
private - поле имеет приватный доступ, то есть доступно только внутри функций самого класса.
protected - похоже на private модификатор, но будет так же доступно при наследов
1 view
113
34
2 days ago 00:03:29 1
Как мошенники попадают в чужой личный кабинет на Госуслугах: три основных способа
2 days ago 01:04:44 1
Я послушал все 100 альбомов Красной Плесени | Шутка, которую никто не понял
5 days ago 00:48:35 1
Чему учит курс «Основы российской государственности»?// Роман Осин. Философский камень №7
6 days ago 00:09:43 1
Трамп отменил 78 указов Байдена || Русское вино пили в Вашингтоне || Маск сделал странный жест
1 week ago 00:01:18 3
Долговечность сруба и высокая экологичность жилища - Царские Краски Живица
2 weeks ago 00:59:09 1
Атеист умирает и встречает существо, не поддающееся логике
2 weeks ago 00:52:03 3
Тайны Конфуция: Как появилось конфуцианство и почему Китай возрождает традиции @MINAEVLIVE
2 weeks ago 00:02:46 1
Гарри Поттер и Проклятое Дитя - Первый Трейлер (2025) По Мотивам Книги | Концепт-версия от Тизер ПРО
2 weeks ago 00:14:30 1
Жители города пришли в ярость! Мигрант ИЗБИЛ БЕРЕМЕННУЮ и был УСПЕШНО ОТМАЗАН!
2 weeks ago 00:03:01 2
Заложные покойники, Кто это?Термины лежащие в основе магических практик
2 weeks ago 00:04:43 2
Предупрежден- значит вооружен. Они готовят массовые эвакуации и захоронения с зимы 2025 г.
2 weeks ago 00:01:22 1
С Днем Рождения Замечательная песня поздравление Музыкальная открытка
2 weeks ago 01:14:18 1
Дёмушкин: ГОТОВЬТЕСЬ К ЖЕСТИ В 2025Г! ДОЛЛАР ВЗЛЕТИТ ДО 130 РУБ? ВКЛАДЫ ЗАМОРОЗЯТ? МИГРАНТОВ БОЛЬШЕ
2 weeks ago 01:08:22 10
Разбираем миф об эффективности рыночной экономики. Уроки здравомыслия и критического мышления №30
2 weeks ago 00:28:49 1
ComfyUi 1 | Установка ComfyUi Portable и на Automatic1111
2 weeks ago 01:24:14 1
КАК ЖИЛИ ДРЕВНИЕ РУСЫ?
2 weeks ago 00:00:39 1
Веселая песня поздравление С Днем Рождения Музыкальная открытка
2 weeks ago 01:52:13 1
Дивный Новый Мир, который создают “Хозяева Денег“
2 weeks ago 01:26:05 1
Что нам врут про СОН? Как правильно спать, мифы и правила здорового сна | Владимир Ковальзон, учёный
2 weeks ago 00:19:46 3
Приднестровье БЕЗ СВЕТА И ТЕПЛА! Газовая ВОЙНА России, Украины и Молдовы?!
2 weeks ago 00:32:23 1
В этом веке всё изменится (или мы вымрем) [Rational Animations]
2 weeks ago 00:00:56 1
Цитаты, которые навсегда изменят Ваше Мышление #мудрость #цитаты #внутренняясила
2 weeks ago 00:33:32 1
Учебный фильм для ОАО “МРСКС БЭ“. Сценарий переключений на основе разрешенный заявки
2 weeks ago 00:33:15 1
Самая ЧАРУЮЩАЯ Красавица и Пранк в авто ✨ Свидание с девушкой и ДЕНЬГИ 🔥Бизнес Дубай и Сахар ТВ