
- •Лекция № 4 Тема: Классы и обьэкты Visual c. Использование конструкторов и деструкторов в пакете Visual c план
- •Понятие класса и объекта. Спецификаторы доступа к членам класса
- •Объявления или спецификация класса
- •Int m_year; / / год издания
- •Реализация класса
- •Использование конструкторов и деструкторов в пакете Visual c
Лекция № 4 Тема: Классы и обьэкты Visual c. Использование конструкторов и деструкторов в пакете Visual c план
Понятие класса и объекта. Спецификаторы доступа к членам класса
Объявления или спецификация класса
Реализация класса
Объявления объекта класса. Инкапсуляция. Преимущества инкапсуляции. Конструкторы и деструкторы.
Понятие класса и объекта. Спецификаторы доступа к членам класса
В окружающей людей реальности объект является ее частью, он существует во времени и пространстве. Объект можно увидеть, потрогать, или знать, что он есть, например, файл на магнитном диске или погрузки конкретного вагона на железнодорожной станции.
В каждой книги свои автор, название, год издания, библиотечный шифр и стоимость, которые являются свойствами книги. Каждая книга в библиотеке может обладать некоторым состоянием: книга свободная (значит, она может быть выдана читателю), книга выдана (значит, она находится у читателя). Книги отличаются друг от друга конкретными значениями свойств, набор которых уникален для каждой отдельной книги, а также конкретным состоянием, текущее значение которого может изменяться во времени. Над книгами в библиотеке можно производить различные действия: искать нужные книги, создавать в библиотечном фонде новые, выдавать читателям, возвращать в библиотеку. Конкретное действие может повлечь за собой изменение состояния. Например, действие «издать книгу» меняет ее состояние с «свободная» в состояние «выдана».
Набор свойств книги (автор, название и т. д.) не что иное, как данные. Действия (искать, создать и т. д.) - функции, которые выполняются над книгами. Ключевая идея объектно-ориентированного программирования состоит в том, что данные и произведенные над этими данными действия объединяются и представляют единое неделимое целое, которое и называют объектом. Объектно-ориентированная программа представляет собой множество взаимосвязанным друг с другом объектов. Взаимодействие объектов осуществляется через вызов некоторой функции этого объекта. В терминах объектно-ориентированного программирования вызов функции называют передачей сообщения. Например, сообщениями книги могут быть следующие: искать, выдать. Динамика изменения состояний объекта и его реакция на сообщения, поступающие отражает поведение объекта.
Описание для всех объектов с общими свойствами и поведением называются классом объектов. Класс вводит понятие абстракции, которая позволяет установить существенные характеристики объекта, которые отличают его от всех других объектов и четко определяют особенности этого объекта с точки зрения дальнейшего рассмотрения. Класс нельзя ни увидеть, ни потрогать, но можно знать, что он есть (например, в программном файле на диске, в библиотеке классов). Класс показывает, как построить существующую во времени и пространстве переменную этого класса - объект.
Класс (class) – определяется программистом тип данных, который описывает множество объектов с общими свойствами, поведением и семантикой. Каждый класс имеет уникальное имя, которое определяет название нового типа данных. Например, для множества книг можно определить класс book.
Объект (object) – переменная типа класс или экземпляр класса. По правилам объявления переменных для класса book можно, например, объявить объект этого класса как своок book.
В связи с тем, что тип класса объединяет данные и операции обработки этих данных в единое целое, для классов вводится понятие членов класса (class members). К членам класса относятся данные (data members) и функции (members function).
Член класса (это) – именованная характеристика или свойство объектов класса, которое имеет собственное значение для каждого объекта. Например, в классе своок можно объявить данные author, title, year, которые будут определять автора, название и год издания для объектов- книг класса. Для каждой книги эти данные будут иметь конкретные значения.
Член класса (функция) – это функция, которая принадлежит классу, с помощью которой объект класса взаимодействует с объектами других классов или того же класса. Функции- члены принято называть методами. Метод представляет собой действие, которое должен выполнить объект для реализации своего поведения, или сервис, который может быть востребован одним объектом в другой. У каждого метода есть свой объект - получатель, то есть объект, для которого метод применяется. Если он использует только данные своего класса, то у него не будет параметров. Если же для выполнения метода нужны дополнительные аргументы, то он параметризованный. Некоторые методы могут принимать различные формы в разных классах, такие методы называются полиморфными. Определение методов находится в классе. Выполняют методы объекты классов, когда эти методы ими вызываются.
Понятие класса является наиболее важным в языке С++. Синтаксис описания класса похож на синтаксис описания структуры. Вот его основная форма:
class < имя_класса >
{
/ / Закрытые функции – члены и данные - члены класса
public:
/ / Открытые функции – члены и данные - члены класса
} < Список_объектов >;
В описании класса «список_обьектов» не является обязательным. Вы можете объявить объекты класса позже, по мере необходимости. <имя_класса> становится новым именем типа данных, используется для объявления объектов этого класса.
Функции и переменные, объявленные внутри объявления класса, становятся членами этого класса. Переменные, объявленные внутри объявления класса, называются данными - членами этого класса; функции, объявленные внутри объявления класса, называются функциями - членами класса. По умолчанию, все функции и переменные, объявленные в классе, становятся закрытыми для этого класса. Это означает, что они доступны только для других членов этого класса. Для объявления открытых членов класса используется ключевое слово public, за которым следует двоеточие. Все функции и переменные, объявленные после слова public, доступны и для других членов класса, и для любой другой части программы, в которой содержится класс.
Пример объявления класса:
class AnyClass
{
/ / закрытый элемент класса
int a;
public:
int get_a ();
void set_a (int num);
};
Хотя функции get_a() и set_a() и объявлены в классе AnyClass, они еще не определены. Для определения функции - члена нужно связать имя класса, частью которого является функция - член с именем функции. Это достигается путем написания имени функции вслед за именем класса с двумя двоеточиями.
Операцию, которая записывается в виде двух двоеточий, называют операцией расширения области видимости. Для задания функции - члена используется следующая общая форма:
< Тип > < имья_класy > :: < имя функции > (<список_параметрив>)
{
/ / Тело функции
}
Ниже приведены примеры определения функций - членов get_a() и set_a() :
void AnyClass :: get_a ()
return a;
}
int AnyClass :: set_a (int_num)
{
a = num;
}
Доступ к элементам данных класса можно получить и с помощью указателя на объект этого класса.
Пример:
class Coord
{
public
int x, y;
void SetCoord (int_x, int_y);
};
void
Coord :: SetCoord (int_x, int_y)
{
x = _x;
y = _y;
}
int main ()
{
Coord pt;
Coord * ptPtr = &pt; / / указатель на объект
/ /. ...
Return 0;
}
Имена элементов класса могут также использоваться с именем класса, за которым следует операция разрешения видимости (двойное двоеточие), то есть вызов элемента имеет вид:
<Имья_класe> :: <имья_члена>
Определение класса напоминает определение структуры, за исключением того, что определение класса:
• Обычно содержит один или несколько спецификаторов доступа, задаваемых с помощью ключевых слов public, protected или private;
• Вместо ключевых слов struct могут применяться class или union;
• Обычно включает наряду с элементами данных функции-члены;
• Обычно содержит некоторые специальные функции-члены, такие как конструктор и деструктор.
Важно помнить о том, что все рабочие данные сохраняются в объекте. Класс не содержит никаких данных, он лишь описывает общую структуру и поведение объекта.
По своей сути объектно - ориентированное программирование - это всего лишь способ группировки функций и данных, облегчает работу над программой.
В комплект Microsoft Visual Studio входит целая библиотека заранее написанных классов - Microsoft Foundation Classes (MFC), которая заметно облегчает работу программиста. На ее основе можно создавать объекты для работы с кнопками, текстовыми полями, полосами прокрутки и т. д. Фирма Microsoft уже поработала нас, и позже мы воспользуемся этим.
Спецификаторы доступа к членам класса
Спецификаторы доступа определяют доступность данных и методов в программе. Существуют следующие спецификаторы доступа:
• public - открытый режим доступа. Члены класса доступны за пределами класса любых функций программы;
• protected - защищенный режим доступа. Члены класса доступны для методов этого класса, производных классов и дружественных классов.
• private - закрытый режим доступа. Члены класса доступны только для методов этого класса и классов - друзей.
Особенность объектно - ориентированного программирования состоит в сокрытии данных, защищает данные класса от несанкционированного доступа к функциям, расположенных за пределами класса. В связи с этим члены - данные, как правило, имеют спецификатор доступа private. В отдельных случаях возникает необходимость данные класса делать открытыми.
Методы, оказывающие сервисные услуги класса, всегда объявляются со спецификатором public. Методы, используемые классом для собственных нужд, имеют спецификатор доступа private. Эти методы обеспечивают реализацию открытых функций - членов и скрывают сложности их реализации.