Лекция 8. Введение в ООП. Часть 1 Красс Александр Alexander.Krass@gmail.com СПбГУ ИТМО, 2008.

Презентация:



Advertisements
Похожие презентации
Лекция 11. Введение в ООП. Часть 4 Красс Александр СПбГУ ИТМО, 2008.
Advertisements

Лекция 4. Введение в С++ Наследование, множественное наследование. Конструкторы, деструкторы. Виртуальные функции.
Лекция 10. Введение в ООП. Часть 3 Красс Александр СПбГУ ИТМО, 2008.
Лекция 10 ОбъектыЛекция 10 ОбъектыООП Инкапсуляция Возможность совместного хранения данных и кода для их обработки Наследование Возможность расширять существующие.
Прикладное программирование кафедра прикладной и компьютерной оптики Наследование.
Объектно-ориентированное программирование С++. Лекция 6 Карпов В.Э.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Лекция 3 Принципы объектно- ориентированного программирования.
Наследование Полиморфизм ВЫЗОВ КОНСТРУКТОРОВ И ДЕСТРУКТОРОВ ПРИ НАСЛЕДОВАНИИ.
Лекция 16. Введение в ООП. Часть 7 Красс Александр СПбГУ ИТМО, 2008.
Лекция 15. Введение в ООП. Часть 6 Красс Александр СПбГУ ИТМО, 2008.
Прикладное программирование кафедра прикладной и компьютерной оптики Абстрактные типы данных.
Лекция 9. Введение в ООП. Часть 2 Красс Александр СПбГУ ИТМО, 2008.
Лекция 13. Введение в ООП. Часть 4 Красс Александр СПбГУ ИТМО, 2008.
ООП Классы Данные отдельно, методы отдельно struct Node { Node* next; void* data; }; struct List { Node* first; int size; }; void* allocate() { … } void.
Лекция 10 Класс как абстрактный тип. Подбельский гл. 9, Страуструп гл. Конструкторы и деструктор Конструкторы - это специальные функции-члены класса, предназначенные.
ООП Классы – 2.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Лекция 12 Перегрузка операторов. Часть 2. Подбельский гл. 9.7, Страуструп гл. 11, Мейрс п. 11,15-17,19. Перегрузка копирующего конструктора T(const T&)
Статические поля класса Статические поля хранят данные, общие для всех элементов класса. Статическое поле существует в единственном экземпляре для всех.
Транксрипт:

Лекция 8. Введение в ООП. Часть 1 Красс Александр СПбГУ ИТМО, 2008

2 Темы Объявление классов Модификаторы доступа Конструкторы Деструкторы

3 Объявление класса struct | class Имя { [модификатор доступа] Члены класса [модификатор доступа] Члены класса };

4 Пример. Класс Rectangle int side = 100; Rectangle rect(side); int x = 5, y = 256; rect.draw(x, y);

5 Пример. Класс Rectangle struct Rectangle { int side_; void draw(int x, int y) const; Rectangle(int side); }; Rectangle::Rectangle(int side) { side_= side; }

6 Пример. Класс Rectangle int side = 100; Rectangle rect(side); int x = 5, y = 256; rect.draw(x, y);... rect.side_ = 0;// Нехорошо такое // разрешать // из-за нижней... // строчки! rect.draw(x + side, y + side);

7 Пример. Класс Rectangle struct Rectangle { void draw(int x, int y); Rectangle(int side); private: int side_; }; Rectangle::Rectangle(int side) { side_= side; }

8 Модификаторы доступа public – доступ открыт всем protected – доступ открыт классам, производным от данного private – доступ открыт самому классу (т.е. методам данного класса) и друзьям (friend) данного класса (как функциям, так и классам)

9 Модификаторы доступа Модификатор доступа относится ко всем перечисленным после него членам до следующего модификатора доступа.

10 Пример. Модификаторы доступа class Example { public: int a_, b_; // Для всех double c_; protected: void f(); // Только int d_; // для себя и // наследников private: const char* TellSecret(int reward) const; // Только int secretPrise; // для себя };

11 Пример. Модификаторы доступа struct Example { public: int a_, b_; // Для всех double c_; protected: void f(); // Только int d_; // для себя и // наследников private: const char* TellSecret(int reward) const; // Только int secretPrise; // для себя };

12 Разница между struct и class struct A { int a_; void f(); }; class A { public: int a_; void f(); } Оба объявления класса A идентичны.

13 Разница между struct и class Если модификатор доступа не указан, то в struct будет подразумеваться, что он public, а в class, что он private. Обычно struct используется для объявления классов без поведения, т.е. тех чья единственная функция – хранение данных.

14 Конструкторы. Начнём с примера class Complex { private: double real_, image_; public: Complex(); Complex(double real, double image);... // Операции по работе с комплексным // числами }; Complex c1, c2(1.0, 1.25);

15 Конструкторы class Имя Класса { [модификатор доступа]... Имя Класса(Список Параметров); }

16 Конструкторы Конструктор ничего не возвращает. Можно объявить конструктор с любыми параметрами, кроме тех, которые имеют тот же тип, что и сам класс. В классе может быть несколько конструкторов, требующих параметры разных типов. Конструктор без параметров называется конструктором по умолчанию.

17 Конструкторы Если в классе не объявлен ни один конструктор, то будет автоматически сгенерирован конструктор по умолчанию (без параметров), который проинициализирует все поля класса значениями по умолчанию. Если в классе есть константы или ссылки, то будет выдана ошибка, т.к. их необходимо инициализировать конкретными значениями.

18 Деструктор Деструктор – это метод класса, который вызывается при уничтожении объекта класса.

19 Деструктор class A { public: ~A(); } { A object; } // Вызов деструктора A *object = new A; delete a; // Вызов // деструктора A *object = new A; object->~A(); // Вызов // деструктора

20 Что можно делать в деструкторе? Освобождать память из под данных, которыми владеет объект через указатели. Освобождать глобальные ресурсы. Сообщать другим объектам о своей скорой кончине.

21 Спасибо за внимание Вопросы?