Разделы презентаций


Программирование

Содержание

Использование динамической памятиОдно из естественных применений динамической памяти – создание динамических массивов, т.е. массивов, размер которых неизвестен во время компиляции, в том числе многомерных массивов.

Слайды и текст этой презентации

Слайд 1Программирование
Лекция 4. Многомерные массивы. Структуры и классы

ПрограммированиеЛекция 4. Многомерные массивы. Структуры и классы

Слайд 2Использование динамической памяти
Одно из естественных применений динамической памяти – создание

динамических массивов, т.е. массивов, размер которых неизвестен во время компиляции,

в том числе многомерных массивов.
Использование динамической памятиОдно из естественных применений динамической памяти – создание динамических массивов, т.е. массивов, размер которых неизвестен

Слайд 3Многомерные встроенные массивы
Матрица

Многомерные встроенные массивыМатрица

Слайд 4Динамические массивы
m[i] = *(m+i)

Динамические массивыm[i] = *(m+i)

Слайд 5Динамические массивы
// массив указателей на строки int
В каждой строке может

быть разное количество элементов

Динамические массивы// массив указателей на строки intВ каждой строке может быть разное количество элементов

Слайд 6Динамические массивы
size_t – спец. тип для указания размера массива
// удаление

массива
// удаляем строчки
// удаляем массив указателей на строки
Данная переменная не

используется

Недостаток – фрагментация памяти

Динамические массивыsize_t – спец. тип для указания размера массива// удаление массива// удаляем строчки// удаляем массив указателей на

Слайд 7Двумерные массивы: эффективная схема
Будем выделять строчки массива не по отдельности,

а все сразу.
Сразу выделяем большой объем памяти.
При таком подходе new

вызываем 2 раза

Указатели на 4, 8, 12, .. ячейки

Указатель на 0 ячейку

Двумерные массивы: эффективная схемаБудем выделять строчки массива не по отдельности, а все сразу.Сразу выделяем большой объем памяти.При

Слайд 8Двумерные массивы: эффективная схема
Возвращаем указатель на указатель на int
Освободим большой

массив
Удалить массив указателей на строки

Двумерные массивы: эффективная схемаВозвращаем указатель на указатель на intОсвободим большой массивУдалить массив указателей на строки

Слайд 9Структуры
Структуры – это способ объединить несколько переменных в одну.
Зачем группировать

данные?
Координаты точки пересечения xi, yi

СтруктурыСтруктуры – это способ объединить несколько переменных в одну.Зачем группировать данные?Координаты точки пересечения xi, yi

Слайд 10Структуры
// Структура Отрезок
// Функции упрощаются
// 3 аргумента вместо 10-ти
// не

забываем «;»

Структуры// Структура Отрезок// Функции упрощаются// 3 аргумента вместо 10-ти// не забываем «;»

Слайд 11Работа со структурами
// функция определения длины отрезка
// мат. библиотека
// чтобы

не копировать всю структуру
// p1 – уже не указатель, поэтому

оператор “.”

Можно использовать разыменование: (*s).p1.x ~ s->p1.x

Работа со структурами// функция определения длины отрезка// мат. библиотека// чтобы не копировать всю структуру// p1 – уже

Слайд 12Инициализация структур
Отличие от массивов
x y
// структура хранит информацию о двумерном массиве
//

количество строк
// количество столбцов
// указатель на двумерный массив
// инициализация переменной
Функция

выделения двумерного массива
Инициализация структурОтличие от массивовx	y// структура хранит информацию о двумерном массиве// количество строк// количество столбцов// указатель на двумерный

Слайд 13Задача
В коде определена следующая структура:
struct ivector3d
{
int array[3];
};
И

определена следующая функция:
void scale(ivector3d *v, int k)
{
for (int

i = 0; i != 3; ++i)
v->array[i] *= k;
}
Пусть у вас есть экземпляр iv3d структуры ivector3d.
Изначально массив array экземпляра iv3d заполнен единицами, и вы вызываете функцию scale следующим образом:
scale(&iv3d, 2);
Какова будет сумма элементов массива array внутри iv3d по завершению функции?
ЗадачаВ коде определена следующая структура:struct ivector3d { 	int array[3]; };И определена следующая функция:void scale(ivector3d *v, int k)

Слайд 14Задача
Ответ к предыдущей задаче: 6.

У вас есть та же самая

структура ivector3d и экземпляр iv3d этой структуры, массив array которого

заполнен единицами. Но теперь функция scale определена следующим образом:

void scale(ivector3d v, int k)
{
for (int i = 0; i != 3; ++i)
v.array[i] *= k;
}
И вы вызываете функцию scale следующим образом:
scale(iv3d, 2);
Вопрос тот же самый: какова будет сумма элементов внутри экземпляра iv3d после завершения функции?
ЗадачаОтвет к предыдущей задаче: 6.У вас есть та же самая структура ivector3d и экземпляр iv3d этой структуры,

Слайд 15Ответ к предыдущей задаче: 3.

Ответ к предыдущей задаче: 3.

Слайд 16Методы
Важное отличие структур на языке С++ от структур в С

– возможность определения методов.
Отличие от функций – внутри методов есть

доступ к полям структуры

Вызов метода

Инициализация структуры

Оператор обращения к полям структуры

Что выведет программа?

МетодыВажное отличие структур на языке С++ от структур в С – возможность определения методов.Отличие от функций –

Слайд 17Ответ к предыдущей задаче: √24.65.
Точка на плоскости
Сдвигает точку
Имена аргументов совпадают

с именами полей структуры
Поле текущего экземпляра

Ответ к предыдущей задаче: √24.65.Точка на плоскостиСдвигает точкуИмена аргументов совпадают с именами полей структурыПоле текущего экземпляра

Слайд 18Методы: объявление и определение
(в заголовочный файл)
(в .cpp-файл)
объявление
реализация

Методы: объявление и определение (в заголовочный файл)(в .cpp-файл)объявлениереализация

Слайд 19Методы
Данные о двумерном массиве
Указатель на данные массива
Размерность массива a×b
Одномерный массив
Метод

переводит адреса из двумерного массива в соответствующие адреса для одномерного

массива

Функция возвращает двумерный массив

В данном случае обнуляем отрицательные элементы массива

МетодыДанные о двумерном массивеУказатель на данные массиваРазмерность массива a×bОдномерный массивМетод переводит адреса из двумерного массива в соответствующие

Слайд 20Пример

Пример

Слайд 21Конструкторы
Определить конструктор – значит определить функцию с именем, совпадающим

с именем Структуры и не возвращающую никакого значения (но не

void)

2 аргумента

this – так как имена совпадают

Конструктор вызывается автоматически при определении переменных

= {0, 0}

Конструкторы Определить конструктор – значит определить функцию с именем, совпадающим с именем Структуры и не возвращающую никакого

Слайд 22Список инициализации
Чаще всего в конструкторах происходит инициализация полей структур.
До

входа в тело конструктора инициализируем x = 0, y =

0

Формальные параметры

Сначала инициализируется x, потом y. Point (): y(0), x(y)

Список инициализации Чаще всего в конструкторах происходит инициализация полей структур.До входа в тело конструктора инициализируем x =

Слайд 23Значения по умолчанию
а также методы и конструкторы
(т.е. в заголовочный

файл)
Такой конструктор будет работать как конструктор с 0, 1 или

2 параметрами.

= {0, 0}

= {2, 0}

= {3, 4}

Значения по умолчанию а также методы и конструкторы(т.е. в заголовочный файл)Такой конструктор будет работать как конструктор с

Слайд 24Конструкторы от одного параметра
Такие конструкторы задают преобразование от значения

типа аргумента к значению типа Структура.
Пустое тело, однако, Point

имеет конструктор

= {(0, 0), (0, 0)}

= {(0, 0), (10, 0)}

= {(0, 0), (20, 0)}

- Неявное преобразование

Конструкторы от одного параметра Такие конструкторы задают преобразование от значения типа аргумента к значению типа Структура. Пустое

Слайд 25Конструкторы от одного параметра
Используется только для конструкторов одного параметра
Можно

вызвать явно
Неявно нельзя. Защита от неявных преобразований

Конструкторы от одного параметра Используется только для конструкторов одного параметраМожно вызвать явноНеявно нельзя. Защита от неявных преобразований

Слайд 26Конструкторы от одного параметра
Такой конструктор может быть вызван как

конструктор с одним параметром. Поэтому может возникнуть неявное преобразование. Explicit

защитит от неявных преобразований
Конструкторы от одного параметра Такой конструктор может быть вызван как конструктор с одним параметром. Поэтому может возникнуть

Слайд 27Конструктор по умолчанию
Для такой структуры невозможно определить переменную, не

указав аргументы конструктора
= {(0, 0), (2, 1)}

Конструктор по умолчанию Для такой структуры невозможно определить переменную, не указав аргументы конструктора= {(0, 0), (2, 1)}

Слайд 28Деструктор
Однако, деструктор можно переопределить
Размер массива
Указатель на динамический массив
«Тильда»
В деструкторе

удалим дин. память, выделенную в конструкторе
Деструктор всегда 1, он не

имеет параметров
Деструктор Однако, деструктор можно переопределитьРазмер массиваУказатель на динамический массив«Тильда»В деструкторе удалим дин. память, выделенную в конструктореДеструктор всегда

Слайд 29Время жизни
Деструктор вызывается при выходе из функции
Переменная определена в

теле цикла
Удаление на каждой итерации цикла

Время жизни Деструктор вызывается при выходе из функцииПеременная определена в теле циклаУдаление на каждой итерации цикла

Слайд 30Объекты в динамической памяти

Объекты в динамической памяти

Слайд 31Удаление

Удаление

Слайд 32Модификаторы доступа
Никакая внешняя функция не сможет обращаться к полям

private. Только методы класса

Модификаторы доступа Никакая внешняя функция не сможет обращаться к полям private. Только методы класса

Слайд 33Ключевое слово class
По умолчанию все поля класса являются private
Размер

массива
Указатель на динамический массив

Ключевое слово class По умолчанию все поля класса являются privateРазмер массиваУказатель на динамический массив

Слайд 34Публичный интерфейс
Это набор методов, доступных внешнему пользователю класса.
Функция изменяет

размер массива
Поля закрытые, т.к. иначе пользователь мог бы изменить размер

массива size_, не изменив при этом сам массив data_
Публичный интерфейс Это набор методов, доступных внешнему пользователю класса.Функция изменяет размер массиваПоля закрытые, т.к. иначе пользователь мог

Слайд 35Абстракция
Выделение публичного интерфейса позволяет абстрагироваться от конкретной реализации данного класса.
Допустим,

мы хотим оптимизировать класс IntArray
Размер массива
Указатель на динамический массив
Т.к. массив

целочисленный, то можно хранить размер массива в самом массиве
АбстракцияВыделение публичного интерфейса позволяет абстрагироваться от конкретной реализации данного класса.Допустим, мы хотим оптимизировать класс IntArrayРазмер массиваУказатель на

Слайд 36Абстракция
Внешние пользователи класса работают только с публичным интерфейсом, можно изменить

реализацию класса, не меняя публичный интерфейс.
Оставляем только 1 поле
На 1

элемент больше

При этом сигнатура публичных методов не изменилась

АбстракцияВнешние пользователи класса работают только с публичным интерфейсом, можно изменить реализацию класса, не меняя публичный интерфейс.Оставляем только

Слайд 37Определение констант
Иногда возникает необходимость защитить данные от случайного или

специального изменения
Кол-во дней в месяцах в невесокосном году
Адрес месяца «май»

Определение констант Иногда возникает необходимость защитить данные от случайного или специального измененияКол-во дней в месяцах в невесокосном

Слайд 38Указатели и const
Не можем поменять значение, но можем поменять адрес
Сможем

менять значение по данному указателю (зн-е переменной a), но не

сможем менять тот адрес, который хранится в данном указателе
Указатели и constНе можем поменять значение, но можем поменять адресСможем менять значение по данному указателю (зн-е переменной

Слайд 39Указатели и const
Для того, чтобы избежать путаницы при использовании указателей

с ключевым словом const, можно использовать следующее правило:
p хранит адрес

переменной a

Ключевое слово const сделает константным значение типа int

Константным станет значение int * (не сможем менять значение, на к-рое указывает p2, т.е. зн-е p)

Не сможем перенаправить p3 на другой адрес, но сможем менять значения

Указатели и constДля того, чтобы избежать путаницы при использовании указателей с ключевым словом const, можно использовать следующее

Слайд 40Книги и интернет-источники на заметку
Дейтел Х., Дейтел П. Как программировать

на C++. — Бином-Пресс, 2009. — 800 с.
Липпман С., Лажойе

Ж. Язык программирования C++. Вводный курс. — Невский Диалект, ДМК Пресс. — 1104 с.
Липпман С., Лажойе Ж., Му Б. Язык программирования C++. Вводный курс. — Вильямс, 2007. — 4-е изд. — 896 с.
Мейерс С. Эффективный и современный С++: 42 рекомендации по использованию С++11 и С++14. — Вильямс, 2015.
Петров А.В. Достижима ли в C++ эффективность языка «среднего уровня»? / DEV Labs C++ 2013.
Прата С. Язык программирования C++. Лекции и упражнения. — Вильямс, 2012. — 6‑е изд. — 1248 с.: ил.
Саттер Г. Новые сложные задачи на C++. — Вильямс, 2005. — 272 с.
Саттер Г. Решение сложных задач на C++. — Вильямс, 2008. — 400 с.
Саттер Г., Александреску А. Стандарты программирования на C++. — Вильямс, 2008. — 224 с.
Седжвик Р. Алгоритмы на C++. — Вильямс, 2011. — 1056 с.
Книги и интернет-источники на заметкуДейтел Х., Дейтел П. Как программировать на C++. — Бином-Пресс, 2009. — 800

Слайд 41Книги и интернет-источники на заметку
Страуструп Б. Программирование. Принципы и практика

использования C++. — Вильямс, 2011. — 1248 с.
Страуструп Б. Язык

программирования C++. — Бином, 2011. — 1136 с.
Шилдт Г. C++: базовый курс. — Вильямс, 2008. — 624 с.
Шилдт Г. C++. Методики программирования Шилдта. — Вильямс, 2009. — 480 с.
Шилдт Г. Полный справочник по C++. — Вильямс, 2007. — 800 с.
Abrahams, D., Gurtovoy, A. C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond (Addison Wesley Professional, 2004).
Книги и интернет-источники на заметкуСтрауструп Б. Программирование. Принципы и практика использования C++. — Вильямс, 2011. — 1248

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика