Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org zaikin.icc@gmail.com.

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



Advertisements
Похожие презентации
Информационные технологии Стандартные библиотечные функции манипулирование данными преобразование и шифрование определение пользователями функций.
Advertisements

Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Объектно-ориентированное программирование С++. Лекция 6 Карпов В.Э.
Объектно-ориентированное программирование Объектно-ориентированное программирование (ООП) - основная методология программирования. Она является продуктом.
Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
Лекция 10 ОбъектыЛекция 10 ОбъектыООП Инкапсуляция Возможность совместного хранения данных и кода для их обработки Наследование Возможность расширять существующие.
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
ОБЪЕКТНО- ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ (ООП) 1.
Полиморфизм. Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Лекция 2: Описание класса 1. Поля 2. Методы 3. Конструкторы.
Наследование Полиморфизм ВЫЗОВ КОНСТРУКТОРОВ И ДЕСТРУКТОРОВ ПРИ НАСЛЕДОВАНИИ.
Основы информатики Лекция. Функции Заикин Олег Сергеевич
1 Классы в Java Ключевое слово class означает: Я говорю тебе, как выглядит новый тип объекта. Класс является базовым элементом объектно-ориентированного.
Классы в C#. Две роли классов Класс Класс – это модуль, архитектурная единица построения программной системы. Модульность построения – основное свойство.
Конструкторы и Деструкторы Конструкторы - функции, явно предназначенные для инициализации объектов Деструкторы - функция обратная конструктору для обеспечения.
Лекция 8. Введение в ООП. Часть 1 Красс Александр СПбГУ ИТМО, 2008.
Прикладное программирование кафедра прикладной и компьютерной оптики Абстрактные типы данных.
Лекция 4. Введение в С++ Наследование, множественное наследование. Конструкторы, деструкторы. Виртуальные функции.
Статические поля класса Статические поля хранят данные, общие для всех элементов класса. Статическое поле существует в единственном экземпляре для всех.
Основы информатики Лекция. Массивы. Указатели. Заикин Олег Сергеевич
Транксрипт:

Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org

Объектно - ориентированное программирование Инкапсуляция - скрытие деталей реализации, обеспечение доступности главного путем помещения всего мешающего, второстепенного в некую условную капсулу ( чёрный ящик ). Наследование позволяет создавать иерархию объектов, в которой объекты - потомки наследуют все свойства своих предков. Свойства при наследовании повторно не описываются. Кроме унаследованных, потомок обладает собственными свойствами. Объект в C++ может иметь сколько угодно потомков и предков. Полиморфизм - возможность определения единого по имени действия, применимого ко всем объектам иерархии, причем каждый объект реализует это действие собственным способом. Класс – инкпасулированная абстракция

Класс Объектно-ориентированное программирование основано на понятии класса. Класс – тип данных, который включает данные и код (предназначенный для выполнения над этими данными. Класс связывает данные с кодом. Объект – экземпляр класса. Класс задает формат объекта. Класс – абстракция, которая реально не существует, пока не будет создан объект этого класса.

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

Описание класса Поля класса: могут иметь любой тип, кроме типа этого же класса (но могут быть указателями или ссылками на этот класс); могут быть описаны с модификатором const. Инициализация полей при описании не допускается.

Класс Объявление класса начинается с ключевого слова class и синтаксически подобно объявлению структуры. По умолчанию поля класса являются закрытыми (private), т.е. к ним могут получить доступ только функции этого же класса. Никакие другие части программы этого не могут. Это одно из проявлений инкапсуляции – можно управлять доступом к определенным элементам данных. class { private: public: };

Пример класса Пример. Класс очередь (queue) class queue { int q[100]; int sloc, rloc; void init(); void qput(int i); int qget(); }; // переменные и функции класса закрыты Почему этот класс бесполезен? Эквивалентно class queue { private: int q[100]; int sloc, rloc; void init(); void qput(int i); int qget(); };

Класс Ключевое слово public используется для объявления открытых членов класса. class queue { int q[100]; int sloc, rloc; public: void init(); void qput(int i); int qget(); }; К функциям init(), qput() и qget() доступ открытый.

Класс После создания объект имеет собственную копию данных, которые составляют класс. Объект занимает определенную область памяти. Чтобы получить доступ к открытому члену класса используется оператор «точка», как и при работе со структурами. Функции-члены класса имеют доступ к закрытым переменным класса. Пример queue Q1, Q2; // объявление двух объектов класса queue Q1.init(); // нет ошибки, доступ к открытой функции Q1.sloc = 3; // ошибка, попытка обращения к закрытому члену класса.

Класс В объявлении класса содержатся прототипы функций. Чтобы реализовать функцию, необходимо указать к какому классу она принадлежит. Для этого перед именем функции нужно поставить имя класса и ::. :: - оператор разрешения области видимости, он квалифицирует имя члена класса вместе с именем его класса. Пример void queue :: qput(int i) { if (sloc == 100) { cout

Класс Различные классы могут использовать одинаковые имена своих полей. С помощью оператора :: компилятор определит, к какому классу он относится. Для вызова из функции-члена другой функции-члена этого же класса оператор. не требуется. Аналогично для обращения к переменным-членам класса. Пример void queue :: init() { rloc = sloc = 0; }

Класс Обычно описание класса помещают в заголовочный файл (расширение *.h), а реализацию функций класса – в файл c расширением *.cpp. Называться файлы должны одинаково. Файл queue.h class queue { int sloc, rloc; public: void init(int i); }; Файл queue.cpp #include queue.h; void queue :: init() { rloc = sloc = 0; }

Пример программы

Закрытые элементы Если rloc и sloc будут public, к чему это может привести?

Присваивание объектов Если есть два объекта одного класса, то один можно присвоить другому. По умолчанию данные поразрядно копируются, в том числе закрытые. queue Q1. Q2; Q1.init(); // Q1.rloc == 0, Q2.rloc неопределен Q2 = Q1; // Q1.rloc == 0, Q2.rloc == 0 Если в классе есть указатель, что произойдет при копировании объектов? my

Присваивание объектов class myclass { int *a; } ; myclass x, y; x.a = new int[2]; y = x; Если в классе есть указатель, что произойдет при копировании объектов?

Конструктор Конструктор – функция, которая автоматически вызывается при создании объекта. Имя конструктора совпадает с именем класса. Используется для инициализации части данных. Например для класса queue при инициализации переменным rloc и sloc нужно присвоить нулевые значения. В рассмотренном ранее примере инициализация выполняется в функции init().

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

Конструктор Пример class queue { int q[100]; int sloc, rloc; public: queue(); // конструктор void qput(int i); int qget(); }; queue :: queue() { sloc = rloc = 0; }

Деструктор Деструктор – функция, которая вызывается при разрушении объекта. Нужен для освобождения ранее выделенной для объекта памяти или других действий при разрушении объекта. Имя деструктора – это имя конструктора, перед которым стоит символ ~ class queue { int q[100]; int sloc, rloc; public: queue(); // конструктор ~queue(); // деструктор void qput(int i); int qget(); };

Деструктор вызывается автоматически, когда объект выходит из области видимости: для локальных объектов при выходе из блока, в котором они объявлены; для глобальных как часть процедуры выхода из main; для объектов, заданных через указатели, деструктор вызывается неявно при использовании операции delete. Пример деструктора: monstr::~monstr() {delete [] name;}Деструктор

Деструктор : не имеет аргументов и возвращаемого значения; не наследуется; Если деструктор явным образом не определен, компилятор автоматически создает пустой деструктор. Деструктор можно вызвать явным образом путем указания полностью уточненного имени, например: queue *q;... q -> ~queue();Деструктор