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


Методы программирования (2 семестр)

ННГУ, ВМК, 2004 г. Методы программирования 2. ООП Л. 01. Введение в ООП. Мееров И.Б.Краткое содержание предыдущей серииКонструктор – специальный метод,

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

Слайд 1ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Методы программирования (2 семестр)

Раздел 2. Лекция 04 Деструкторы. Статические члены класса. Дружественные функции и классы.

Нижегородский государственный университет
им. Н.И. Лобачевского

Факультет вычислительной математики и кибернетики

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 2ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Краткое содержание предыдущей серии

Конструктор – специальный метод, предназначенный для создания объекта.
Правило хорошего тона – реализовывать конструкторы в классе самостоятельно, не надеясь на компилятор.
Конструкторов обычно бывает несколько.
Выделяются конструктор по умолчанию, конструктор-инициализатор, конструктор приведения типа и конструктор копирования.
В случае, если класс содержит поля-указатели, поля ссылки или поля объекты, написание конструкторов является абсолютно необходимым.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 3ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Дальнейшее изучение

Сегодня мы изучим, как уничтожаются объекты.

Итак, за дело!

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 4ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Нажмите любую клавишу...
Нет, нет, только не эту!..

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 5ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

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

Вернемся к проблеме представления объектов в оперативной памяти компьютера.
Вспомним, что нам известно?
Объекты содержат данные и ссылку на методы.
Реализация методов присутствует для класса в единственном числе.
Данные у каждого объекта свои.
Объект добирается методов своего класса при помощи ссылки.
Методы не вызываются сами по себе. Они вызываются для какого-то объекта.
Методы добираются до данных вызвавшего их объекта при помощи указателя this, который неявно передается в каждый из методов.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 6ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Проблема освобождения памяти

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

B

Re

Im

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 7ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Некоторые соображения о важности проблемы

Грамотное освобождение памяти – один из ключевых вопросов в программировании.
От того, насколько аккуратно и правильно прописаны инструкции, связанные с освобождением памяти, существенно зависит стабильность и надежность вашей программы.
Ошибки, допущенные в освобождении памяти, чрезвычайно трудно обнаружить и локализовать. Работа с памятью – один из основных потенциальных источников скрытых ошибок, поэтому именно здесь необходимо быть особенно внимательным.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 8ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Залог успеха – понимание принципов работы используемого инструментария

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 9ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

2 случая удаления объекта

Случай 1 (для статически созданного объекта):
Объект удаляется автоматически при выходе из блока.

Случай 2 (для динамически созданного объекта):
delete <Имя объекта>;

Заметим, что во втором случае delete нужно писать обязательно, т.к. автоматического освобождения памяти не произойдет.
Можем ли мы как-то влиять на действия, происходящие при удалении объектов?

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 10ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Определение деструктора

Деструктор – специальный вид метода, применяемый для освобождения памяти, занимаемой объектом.
Функции деструктора:
освобождение памяти, занимаемой объектом и всеми его полями, в том числе теми, память для которых выделялась динамически;
любые завершающие действия, которые необходимо выполнить вместе с удалением объекта (например, скрытие геометрической фигуры на экране).

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 11ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Синтаксис объявления деструктора

Синтаксис объявления деструктора:
~<Имя класса>();

Пример 1:
TComplex::~TComplex() {
}

Пример 2:
TNamedComplex::~TNamedComplex() {
delete []name;
}

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 12ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Свойства деструкторов

деструктор не имеет аргументов и возвращаемого значения;
деструктор не может быть объявлен как const или static;
деструктор не наследуется;
деструктор может быть виртуальным (и чаще всего бывает таким, будет рассмотрено позже в теме “виртуальные методы”).

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 13ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Когда вызывается деструктор?

Деструктор вызывается автоматически, когда объект выходит из области видимости:
для локальных объектов — при выходе из блока, в котором они объявлены;
для глобальных — как часть процедуры выхода из main;
для объектов, заданных через указатели, деструктор вызывается неявно при использовании операции delete.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 14ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Осторожно: реализацию писал крупный специалист! (источники ошибок)

Если в классе явно не указано ни одного деструктора, компилятор создает его автоматически.
В случае, если у вас есть поля-указатели, необходимо реализовать деструктор самостоятельно, включив в него инструкции освобождения памяти для полей-указателей!
Не вздумайте удалять объект более 1 раза!
Если объект был создан динамически (посредством new), необходимо явное использование операции delete, которая инициирует запуск деструктора.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 15ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Пример работы с деструкторами

class TNamedComplex {
public:
int re; int im;
char *name;
TNamedComplex() {name = “”}
~TNamedComplex() { delete []name; }

};

TComplex B(1, 2, “b”); // удаляется автом.

TComplex *A = new TComplex(2, 3, “qq”);
delete A;

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 16ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Деструкторы. Некоторые итоги

Деструктор – специальный метод, предназначенный для уничтожения объекта.
Компилятор автоматически создает деструктор для освобождения памяти, занимаемой полями класса.
В случае, если класс содержит поля-указатели, написание деструкторов является абсолютно необходимым.
Явно вызывать деструктор не рекомендуется. Рекомендация – использование delete (для объектов, созданных через указатели).

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 17ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Следующая тема

Далее мы рассмотрим, что означают волшебные слова static и friend.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 18ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Модификатор static. Статические поля и методы. Суть проблемы

Периодически возникает необходимость организовать класс так, чтобы некоторые поля были “общими” у всех объектов данного класса.
При этом общность понимается в том смысле, что такие поля должны иметь одинаковые значения для всех объектов данного класса.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 19ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Статические поля

Статическими полями класса называются поля, значения которых являются общими для всех объектов данного класса, и хранятся в единственном экземпляре.
Примеры статических полей:
Признак ReadOnly.
Ссылка на общий используемый ресурс.
Значение некоторого существенного параметра (например, рабочий каталог программы).
Количество созданных объектов данного типа.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 20ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Объявление статических полей

Статические поля объявляются в классе с модификатором static.
Пример:
class TNamedColoredComplex {
public:
int re;
int im;
char *name;
// Цвет для отображения на // координатной плоскости
static int color;

};

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 21ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Объекты и статические поля

Реализация методов

B

re

im

name

A

re

im

name

color

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 22ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Свойства статических полей 1

Память под статическое поле выделяется один раз при его инициализации независимо от числа созданных объектов.
Память под статическое поле выделяется даже тогда, когда не создано ни одного объекта.
Память под статическое поле инициализируется с помощью операции доступа к области действия, а не операции выбора.
Примеры:
int TNamedColoredComplex::color;
int TNamedColoredComplex::color = 0;

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 23ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Свойства статических полей 2

Статические поля доступны как при помощи имени объекта, так и при помощи имени класса.
Примеры:
cout << TNamedColoredComplex.color;
TNamedColoredComplex C;
cout << C.color;
TNamedColoredComplex *Q = new …;
cout << Q->color;

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 24ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Свойства статических полей 3

На статические поля распространяется действие спецификаторов доступа, поэтому статические поля, описанные как private, нельзя изменить с помощью операции доступа к области действия, как описано выше. Это можно, сделать только с помощью статических методов (см. далее).
Память, занимаемая статическим полем, не учитывается при определении размера объекта с помощью операции sizeof.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 25ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Статические методы. Суть проблемы

Возможная проблема заключается в том, что Вам может понадобиться скрыть статические поля в секции private.
В этом случае доступ к ним извне могут получить только специальные статические методы.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 26ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Статические методы. Объявление статических методов

Статическими методами называются методы класса, предназначенные для работы со статическими полями.
Статические методы объявляются с модификатором static.
Статические методы доступны либо через имя класса, либо через имя объекта.
Статические методы могут вызываться даже тогда, когда ни одного объекта не создано.
Статический метод не получает указатель this.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 27ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Статические поля и методы. Пример 1

class TCountedComplex {
private:
static int count;
int re; int im;
public:
static int GetCount() { return count; }
static void IncCount() { count++; }

};

TCountedComplex :: int count = 0; // в глоб. области
void main() {
TCountedComplex A;
A.IncCount();
}

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 28ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Статические поля и методы. Пример 2

Важная проблема – корректное удаление объектов. Операция delete работает таким образом, что она проверяет указатель на NULL перед попыткой освобождения памяти. Но вот незадача: операция delete не обнуляет указатель!
delete A; // После этого очень часто A != NULL
Возможное решение проблемы: создаем в классе статический метод Release, который вызывает delete и обнуляет указатель.
Для желающих ДЗ: реализовать данную схему.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 29ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Дружественные функции и классы. Модификатор friend

Суть проблемы:
если нельзя, но очень хочется, то можно! 

Иногда очень нужно получить внутри некоторой функции или внутри некоторого класса доступ к private части нашего класса.
Для этих целей существует модификатор friend.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 30ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Модификатор friend

Классы, которые будут являться дружественными для нашего класса, должны быть упомянуты внутри нашего класса с модификатором friend.
Функции, которые будут являться дружественными для нашего класса, должны быть упомянуты внутри нашего класса с модификатором friend.
Такие функции и классы получат доступ к скрытой части нашего класса.
Дружественные функции должны получать как параметр ссылку на объект класса (т.к. они не получают указатель this).

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 31ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Класс сам определяет состав своих “друзей”!

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 32ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Пример использования модификатора friend

class TMathOp;
int sqrsqr(const TMathOp& m) { … }
class TComplex {
public:
int re;
int im;
};
class TMathOp {
private: …
public: …

friend class TComplex;
friend int sqrsqr(const TMathOp& m);
}

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 33ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Если друг оказался вдруг
И не друг, и не враг, а так…

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 34ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Рекомендация

Дружественные функции и классы – существенное нарушение идеологии ООП, в частности принципа инкапсуляции.
Рекомендация: по возможности стараться обходиться без этого (аналогия: оператор goto в структурном программировании).

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 35ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Следующая тема

Далее мы рассмотрим, как в чем заключается и как реализуется в C++ перегрузка операций.

ННГУ, ВМК, 2004 г.           Методы программирования 2.

Слайд 36ННГУ, ВМК, 2004 г.

Методы программирования 2. ООП Л. 01.

Введение в ООП. Мееров И.Б.

Павловская Т.А. C/C++ Программирование на языке высокого уровня.
Ален И. Голуб. Правила программирования на C/C++.
Из книг заимствованы различные идеи, элементы текста.
http://lye.upnet.ru
http://xaxa.h1.ru/jokes.html

ННГУ, ВМК, 2004 г.           Методы программирования 2.

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

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

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

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

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


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

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