23
Основы информатики Основы информатики Классы Классы Заикин Олег Сергеевич [email protected]

Основы информатики Классы

  • Upload
    mayda

  • View
    49

  • Download
    1

Embed Size (px)

DESCRIPTION

Основы информатики Классы. Заикин Олег Сергеевич [email protected]. Объектно-ориентированное программирование. Инкапсуляция - скрытие деталей реализации, обеспечение доступности главного путем помещения всего мешающего, второстепенного в некую условную капсулу (чёрный ящик ) . - PowerPoint PPT Presentation

Citation preview

Page 1: Основы информатики Классы

Основы информатикиОсновы информатики

КлассыКлассы

Заикин Олег Сергеевич

[email protected]

Page 2: Основы информатики Классы

Объектно-ориентированное Объектно-ориентированное программированиепрограммирование

Инкапсуляция - скрытие деталей реализации, обеспечение доступности главного путем помещения всего мешающего, второстепенного в некую условную капсулу (чёрный ящик).

Наследование позволяет создавать иерархию объектов, в которой объекты-потомки наследуют все свойства своих предков. Свойства при наследовании повторно не описываются. Кроме унаследованных, потомок обладает собственными свойствами. Объект в C++ может иметь сколько угодно потомков и предков.

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

Page 3: Основы информатики Классы

КлассКлассОбъектно-ориентированное программирование основано на понятии класса.

Класс – абстрактный тип данных в объектно-ориентированном программировании.

Объект – экземпляр класса. Класс задает формат объекта.

Класс – абстракция, которая реально не существует, пока не будет создан объект этого класса.

Page 4: Основы информатики Классы

КлассКлассОбъявляя класс, Вы задаете данные и код, который выполняется над данными.

Простой класс может содержать только данные или только код, но обычно содержится и то и другое.

Класс в итоге определяется как список своих членов, а именно полей (свойств) и методов/функций/процедур.

Page 5: Основы информатики Классы

КлассКлассОбъявление класса начинается с ключевого слова class и синтаксически подобно объявлению структуры.

По умолчанию члены класса являются закрытыми (private), т.е. к ним могут получить доступ только функции этого же класса. Никакие другие части программы этого не могут. Это одно из проявлений инкапсуляции – можно управлять доступом к определенным элементам данных. Для открытости нужно использовать ключевое слово public.

class <имя> {private:

<описание скрытых извне членов класса>

public:

<описание доступных извне членов класса>

};

Page 6: Основы информатики Классы

Поля классаПоля класса

Поля класса:

• могут иметь любой тип, кроме типа этого же класса

(но могут быть указателями или ссылками на этот

класс);

• могут быть описаны с модификатором const.

Инициализация полей при описании не допускается.

Тело класса определяет отдельную область видимости.

Наличие в двух разных классах членов с одинаковыми

именами – не ошибка, эти имена относятся к разным

областям видимости.

Page 7: Основы информатики Классы

Функции классаФункции класса

Функции (методы) класса объявляются в его теле.

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

Page 8: Основы информатики Классы

Пример классаПример класса

Пример. Класс очередь (queue)

class queue { int q[100]; int sloc, rloc; void init(); void qput(int i); int qget();};

Почему класс queue бесполезен?

Эквивалентноclass queue { private: int q[100]; int sloc, rloc; void init(); void qput(int i); int qget();};

Page 9: Основы информатики Классы

КлассКлассclass queue {

int q[100];int sloc, rloc;

public:void init();void qput(int i);int qget();

};

Теперь к функциям init(), qput() и qget() доступ открытый.

Хотя бы к одной функции класса должен быть открытый доступ, иначе невозможно что-либо сделать с полями класса.

Page 10: Основы информатики Классы

КлассКлассПосле создания объект имеет собственную копию данных, которые составляют класс. Объект занимает определенную область памяти.

Чтобы получить доступ к открытому члену класса используется оператор «точка», как и при работе со структурами.

К закрытым членам класса так обратиться нельзя.

Пример

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

Page 11: Основы информатики Классы

КлассКлассВ объявлении класса содержатся только прототипы функций.

Чтобы реализовать функцию, необходимо указать к какому классу она принадлежит. Для этого перед именем функции нужно поставить имя класса и “::”.

“::” - оператор разрешения области видимости, он квалифицирует имя члена класса вместе с именем его класса.

Примерvoid queue :: qput(int i){

if (sloc == 100) {cout << “Очередь заполнена” << endl;return;

}q[sloc++] = i;

}

Page 12: Основы информатики Классы

КлассКлассРазличные классы могут использовать одинаковые имена своих членов. С помощью оператора “::” компилятор определит, к какому классу он относится.

Для вызова из функции класса другой функции этого же класса оператор “.” не требуется. Аналогично для обращения к полям класса.

Примерvoid queue :: init(){

rloc = sloc = 0; // указывать область видимости не нужно}

Page 13: Основы информатики Классы

КлассКлассОбычно описание класса помещают в заголовочный файл (расширение *.h), а реализацию функций класса – в файл c расширением *.cpp. Называться файлы должны одинаково.

Файл queue.hclass queue {

int sloc, rloc;public:

void init(int i);};

Файл queue.cpp#include “queue.h”;

void queue :: init(){

rloc = sloc = 0;}

Page 14: Основы информатики Классы

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

Page 15: Основы информатики Классы

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

Page 16: Основы информатики Классы

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

// функция возвращает текущее количество элементов в очередиint queue :: size() {

return sloc - rloc;}

Page 17: Основы информатики Классы

Присваивание объектовПрисваивание объектовЕсли есть два объекта одного класса, то один можно присвоить другому. По умолчанию данные поразрядно копируются, в том числе закрытые.

queue Q1. Q2;Q1.init();// Q1.rloc == 0, Q2.rloc неопределенQ2 = Q1;// Q1.rloc == 0, Q2.rloc == 0

Если в классе есть указатель, что произойдет при копировании объектов?

Page 18: Основы информатики Классы

Присваивание объектовПрисваивание объектовclass myclass { int *a;} ;

myclass x, y;x.a = new int[2];y = x;

Если в классе есть переменная-указатель, что произойдет при копировании объектов?

Page 19: Основы информатики Классы

КонструкторКонструкторКонструктор – функция, которая автоматически вызывается при создании объекта. Имя конструктора совпадает с именем класса.

Используется для инициализации части данных.

Если программист не указал ни одного конструктора, компилятор создает его автоматически. Такой конструктор вызывает конструкторы по умолчанию для полей класса и конструкторы по умолчанию базовых классов.

Например для класса queue при инициализации переменным rloc и sloc нужно присвоить нулевые значения.

В рассмотренном ранее примере инициализация выполняется в функции init().

Page 20: Основы информатики Классы

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

class queue {int q[100];int sloc, rloc;

public:queue(); // конструкторvoid qput(int i);int qget();

};

queue :: queue(){

sloc = rloc = 0;}

queue Q1, Q2; // создано 2 объекта, у каждого вызван конструктор

Page 21: Основы информатики Классы

ДеструкторДеструкторДеструктор – функция, которая вызывается при разрушении объекта. Нужен для освобождения ранее выделенной для объекта памяти или других действий при разрушении объекта.

Имя деструктора – это имя конструктора, перед которым стоит символ ~

class queue {int q[100];int sloc, rloc;

public:queue(); // конструктор~queue(); // деструкторvoid qput(int i);int qget();

};

Page 22: Основы информатики Классы

Деструктор вызывается автоматически, когда объект

выходит из области видимости:

для локальных объектов — при выходе из блока, в котором

они объявлены;

для глобальных — как часть процедуры выхода из main;

для объектов, заданных через указатели, деструктор

вызывается неявно при использовании операции delete.

ДеструкторДеструктор

Page 23: Основы информатики Классы

Деструктор:

не имеет аргументов и возвращаемого значения;Если деструктор явным образом не определен,

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

Деструктор можно вызвать явным образом путем указания полностью уточненного имени, например:

queue *q; ...

q -> ~queue();

ДеструкторДеструктор