Ссылка — это псевдоним для другой переменной. Они объявляются при помощи символа &. Ссылки должны быть проинициализированы при объявлении, причем только один раз. Тип "ссылка на type" определяется следующим образом: type& имя_перем. int& i, double& var.
All posts by admin
Спецификатор inline.
Может быть использован перед определением функции для того, чтобы компилятор помещал ее код непосредственно в место вызова функции. //Программа 3. #include <stdio.h> #include <conio.h>
Динамически распределяемая память
В отличие от статических и автоматических данных, память под которые распределяется компилятором, динамически распределяемая память выделяется программой самостоятельно. Время жизни таких объектов также определяется программой. Память выделяется по мере необходимости и должна освобождаться как только данные, содержащиеся в ней больше не нужны. Доступ к ней осуществляется при помощи указателей.
Объявления указателей и приведение типов
Указатель представляет собой переменную, содержащую адрес другой переменной. Объявление указателя всегда должно устанавливать его на некоторый конкретный тип, даже если этот тип void (что фактически означает указатель на любой тип). Если type есть любой предопределенный или определенный пользователем тип, включая void, то объявление type *ptr;
Операции с указателями
Получить значение объекта, который адресуется указателем, можно при помощи операции * : int * s; //s не определено int b, a = 10; //b не определено s = &a; //s указывает на а b = *s; //b = 10
Преобразования указателей
Указатели одного типа могут быть преобразованы в указатели другого типа при помощи следующего механизма приведения типов: char *str int *ip str = (char*)ip; В более общем виде, приведение (type*) преобразует указатель в тип "указатель на тип type".
Операции new и delete
Операции new и delete выполняют динамическое распределение и отмену распределения памяти, аналогично, но с более высоким приоритетом, нежели стандартные библиотечные функции семейства malloc и free. Упрощенный синтаксис:
Операция new с массивами
Если "имя" это массив, то возвращаемый new указатель указывает на первый элемент массива. При создании с помощью new многомерных массивов следует указывать все размерности массива: mat_ptr = new int[3][10][12]; // так можно mat_ptr = new int[3][][12]; // нельзя …
Инициализаторы с операцией new
Другим преимуществом операции new по сравнению с malloc является возможность инициализации. При отсутствии явных инициализаторов объект, создаваемый new, содержит непредсказуемые данные ("мусор"). Объекты, распределяемые new, за исключением массивов, могут инициализироваться соответствующим выражением в скобках: int_ptr = new int(3);
Проблемы, возникающие при использовании динамически распределяемой памяти
1). Недоступные блоки — блоки памяти, указатели на которые потеряны. 2). Висящие ссылки — указатели на освобожденные блоки памяти. 3). Повторное освобождение динамической памяти. Недоступные блоки возникают после выделения памяти при присваивании указателю какого — либо другого значения или при уничтожении локального указателя после выхода из области видимости.
Указатель на void
Такому указателю можно присвоить значение указателя на любой базовый тип. void *v_ptr; int *int_ptr = new int; v_ptr = int_ptr;
Перегрузка функций
Имена функций могут быть перегружены в пределах одной области видимости. Компилятор отличает одну функцию от другой по сигнатуре. Сигнатура задается числом, порядком следования и типами ее параметров.
Значение формальных параметров по умолчанию
Формальный параметр может иметь значение по умолчанию. Все параметры стоящие справа от него тоже должны иметь значения по умолчанию. Эти значения передаются в функцию, если при вызове данные параметры не указаны.
Использование системы ввода/вывода
Система ввода/вывода – неотъемлемая часть среды программирования С++, и она занимает в языке особое место. В заголовочном файле Iostream.h содержаться следующие объявления одного потока ввода и трех потоков вывода:
Форматирование вывода
Для форматирования вывода можно установить несколько флагов, для этого используются функции-члены flags, setf, unsetf. unsigned v =12345; cout << "Before: " << v << endl; cout.setf(cout.hex); //Модификация потока cout << "After: " << v << endl;
271. Скрытое деление
За одним из столиков клубной комнаты настольных игр происходит молчаливое «сражение» двух юных шахматистов.
Лабораторная работа 1
Цель работы: Ознакомиться с некоторыми расширениями языка С, позволяющими перейти к объектно-ориентированному программированию С++. 1. Порядок выполнения работы. 1. Ознакомьтесь с теоретическими сведениями. 2. Разберите работу программ 1,2,3. В программе 3 обратите внимание на время выполнения первого и второго цикла.
Классы. Понятие класса.
Класс — это определяемый пользователем тип. Описание класса очень похоже на описание структуры в Си. Рассмотрим реализацию понятия даты с использованием struct для того, чтобы определить представление даты date и множества функций для работы с переменными этого типа:
Лабораторная работа 2
Цель работы: Ознакомиться со структурой класса, его созданием и использованием, описанием членов-данных класса и методов доступа к ним, возможностью инициализации объектов класса с помощью конструкторов и уничтожением их с помощью деструкторов.
Простое и множественное наследование
3.1. Простое наследование. Простое наследование описывает родство между двумя классами: один из которых наследует второму. Класс, нахо дящийся на вершине иерархии, называется базовым классом. Прочие классы называются производными классами. Из одного класса могут выводится многие классы, но даже в этом случае подобный вид взаимосвязи остается простым наследованием. Базовый класс часто называют предком, а производный класс Читать далее
Виртуальные функции
Виртуальная функция — это функция, вызов которой за-висит от типа объекта. В ООП можно писать виртуальные функции так, чтобы объект определял, какую функцию необходимо вызвать, во время выполнения программы. Технику использования виртуальных функций иногда называют полиморфизмом, намекая на то, что объекты имеющие дело с виртуальными функциями кажутся приспосабливающимися к контексту, в котором они используются.
Лабораторная работа 3
Цель работы: Ознакомиться с возможностью наследования свойств класса в производных классах, изучить механизм виртуальных функций и их использование для позднего связывания. 1. Порядок выполнения работы. 1. Ознакомьтесь с теоретической частью. 2. Разберитесь с работой программ 1 — 3.
Дружественные классы
В классе можно объявить другой класс дружественным. Один класс (в котором объвляется друг) дает другому классу (другу) возможность доступа ко всем закрытым членам первого класса. Обычно дружественные классы используются, когда двум классам, не связанным отношением родства, необходим доступ к закрытым или защищенным членам класса.
Дружественные функции
Дружественные функции похожи, но более безопасны, чем дружественные классы. Объявление функции дружественной классу дает ей доступ к закрытым и защищенным членам класса. // Программа 2 Пример объявления дружественной функции #include <iostream.h>
Перегрузка операторов
Перегрузка операторов дает возможность добавлять к встроенным типам данных в С++ новые типы. В зависимости от назначения перегрузка операторов объявляется так же, как и обычная дружественная функция или функция-член класса.
Перегрузка операторов new и delete
Для перегрузки new следует использовать прототип функции вида: void * operator new(size_t size); В дальнейшем обращение к оператору new для выделения памяти объектам класса будут перенаправлены замещающей функции. Функция должна возвращать адрес памяти, выделенной объекту. Вместо кучи можно выделять память из статического буфера, на диске или другом запоминающем устройстве.
Лабораторная работа 4
Цель работы: Ознакомиться с механизмом дружественных классов и функций, а также получения законченного нового типа данных, определив для него допустимые операции с помощью перегрузки операторов. 1. Порядок выполнения работы. 1. Ознакомьтесь с теоретической частью.
Файловые потоки ввода-вывода
5.1. Использование потоков ввода-вывода. С помощью перегрузки операторов ввода и вывода можно заставить компилятор распознавать в операторах ввода-вы-вода один или несколько необходимых классов. Рассмотрим как создаются потоковые классы.
Элементы теории игр. Принятие решений в условиях конфликтных ситуаций и противодействия. Основные понятия теории игр.
В экономике при планировании и управлении, в военном деле часто встречаются ситуации, которые носят конфликтный характер. Такие ситуации имеют лица, интересы которых частично или полностью противоположны. И возникает задача выбора рациональной обработки действий участников конфликта для достижения поставленной цели. Эта задача отличается от ранее рассмотренных экстремальных задач, в которых имелось одно лицо, заинтересованное в достижении Читать далее
Метод декомпозиции Данцига- Вульфа
Метод декомпозиции получил название по имени американских ученых Данцига и Вульфа, которые его разработали. С помощью этого метода решение исходной задачи блочного типа, имеющей большую размерность, сводятся к решению задач подсистем, т. н. подзадач и к решению главной задачи центра, которая связывает решение подзадач воедино. Рассмотрим метод по этапам.
