Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемТарас Ртищев
1 Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
2 Объектно - ориентированное программирование Инкапсуляция - скрытие деталей реализации, обеспечение доступности главного путем помещения всего мешающего, второстепенного в некую условную капсулу ( чёрный ящик ). Наследование позволяет создавать иерархию объектов, в которой объекты - потомки наследуют все свойства своих предков. Свойства при наследовании повторно не описываются. Кроме унаследованных, потомок обладает собственными свойствами. Объект в C++ может иметь сколько угодно потомков и предков. Полиморфизм - возможность определения единого по имени действия, применимого ко всем объектам иерархии, причем каждый объект реализует это действие собственным способом. Класс – инкпасулированная абстракция
3 Класс Объектно-ориентированное программирование основано на понятии класса. Класс – тип данных, который включает данные и код (предназначенный для выполнения над этими данными. Класс связывает данные с кодом. Объект – экземпляр класса. Класс задает формат объекта. Класс – абстракция, которая реально не существует, пока не будет создан объект этого класса.
4 Класс Объявляя класс, Вы задаете данные и код, который выполняется над данными. Простой класс может содержать только данные или только код, но обычно содержится и то и другое. Данные объявляются в виде переменных, код оформляется в виде функций. Функции и переменные, составляющие класс, называются его полями.
5 Описание класса Поля класса: могут иметь любой тип, кроме типа этого же класса (но могут быть указателями или ссылками на этот класс); могут быть описаны с модификатором const. Инициализация полей при описании не допускается.
6 Класс Объявление класса начинается с ключевого слова class и синтаксически подобно объявлению структуры. По умолчанию поля класса являются закрытыми (private), т.е. к ним могут получить доступ только функции этого же класса. Никакие другие части программы этого не могут. Это одно из проявлений инкапсуляции – можно управлять доступом к определенным элементам данных. class { private: public: };
7 Пример класса Пример. Класс очередь (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(); };
8 Класс Ключевое слово public используется для объявления открытых членов класса. class queue { int q[100]; int sloc, rloc; public: void init(); void qput(int i); int qget(); }; К функциям init(), qput() и qget() доступ открытый.
9 Класс После создания объект имеет собственную копию данных, которые составляют класс. Объект занимает определенную область памяти. Чтобы получить доступ к открытому члену класса используется оператор «точка», как и при работе со структурами. Функции-члены класса имеют доступ к закрытым переменным класса. Пример queue Q1, Q2; // объявление двух объектов класса queue Q1.init(); // нет ошибки, доступ к открытой функции Q1.sloc = 3; // ошибка, попытка обращения к закрытому члену класса.
10 Класс В объявлении класса содержатся прототипы функций. Чтобы реализовать функцию, необходимо указать к какому классу она принадлежит. Для этого перед именем функции нужно поставить имя класса и ::. :: - оператор разрешения области видимости, он квалифицирует имя члена класса вместе с именем его класса. Пример void queue :: qput(int i) { if (sloc == 100) { cout
11 Класс Различные классы могут использовать одинаковые имена своих полей. С помощью оператора :: компилятор определит, к какому классу он относится. Для вызова из функции-члена другой функции-члена этого же класса оператор. не требуется. Аналогично для обращения к переменным-членам класса. Пример void queue :: init() { rloc = sloc = 0; }
12 Класс Обычно описание класса помещают в заголовочный файл (расширение *.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; }
13 Пример программы
15 Закрытые элементы Если rloc и sloc будут public, к чему это может привести?
16 Присваивание объектов Если есть два объекта одного класса, то один можно присвоить другому. По умолчанию данные поразрядно копируются, в том числе закрытые. queue Q1. Q2; Q1.init(); // Q1.rloc == 0, Q2.rloc неопределен Q2 = Q1; // Q1.rloc == 0, Q2.rloc == 0 Если в классе есть указатель, что произойдет при копировании объектов? my
17 Присваивание объектов class myclass { int *a; } ; myclass x, y; x.a = new int[2]; y = x; Если в классе есть указатель, что произойдет при копировании объектов?
18 Конструктор Конструктор – функция, которая автоматически вызывается при создании объекта. Имя конструктора совпадает с именем класса. Используется для инициализации части данных. Например для класса queue при инициализации переменным rloc и sloc нужно присвоить нулевые значения. В рассмотренном ранее примере инициализация выполняется в функции init().
19 Если программист не указал ни одного конструктора, компилятор создает его автоматически. Такой конструктор вызывает конструкторы по умолчанию для полей класса и конструкторы по умолчанию базовых классов. Конструкторы не наследуются. Конструкторы глобальных объектов вызываются до вызова функции main. Локальные объекты создаются, как только становится активной область их действия. Конструктор запускается и при создании временного объекта (например, при передаче объекта из функции).Конструктор
20 Конструктор Пример class queue { int q[100]; int sloc, rloc; public: queue(); // конструктор void qput(int i); int qget(); }; queue :: queue() { sloc = rloc = 0; }
21 Деструктор Деструктор – функция, которая вызывается при разрушении объекта. Нужен для освобождения ранее выделенной для объекта памяти или других действий при разрушении объекта. Имя деструктора – это имя конструктора, перед которым стоит символ ~ class queue { int q[100]; int sloc, rloc; public: queue(); // конструктор ~queue(); // деструктор void qput(int i); int qget(); };
22 Деструктор вызывается автоматически, когда объект выходит из области видимости: для локальных объектов при выходе из блока, в котором они объявлены; для глобальных как часть процедуры выхода из main; для объектов, заданных через указатели, деструктор вызывается неявно при использовании операции delete. Пример деструктора: monstr::~monstr() {delete [] name;}Деструктор
23 Деструктор : не имеет аргументов и возвращаемого значения; не наследуется; Если деструктор явным образом не определен, компилятор автоматически создает пустой деструктор. Деструктор можно вызвать явным образом путем указания полностью уточненного имени, например: queue *q;... q -> ~queue();Деструктор
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.