Информатика и технология программирования

       

Синтаксис класса и объекта в Си++


В самом простом виде класс определяется в Си++ как структура, работа с элементами данных которой возможна только через функции-элементы. В отличие от структуры класс имеет " приватную" (личную) часть, элементы которой доступны только в функциях-элементах класса, и " публичную" (общую) часть, на элементы которой ограничения доступа не накладываются. Объектом называется переменная, типом которой является класс (структура):

.


struct dat class dat
//--------------------------------------------------------


// Определение структуры Определение класса


//--------------------------------------------------------


{ {
// Личная часть класса


int day,month,year; int day,month,year;
public:
// Общая часть класса


void SetDat(int,int,int); void SetDat(int,int,int);
void SetDat(char *); void SetDat(char *);
} }
void main() void main()
{ {
// Переменные a,b типа dat // Объекты a,b класса dat


dat a,b; dat a,b;
a.day = 5; // Непосредственное обращение


a.month = 12; // к личной части объекта запрещено


b.SetDat("12,12,1990"); b.Setdat("12,12,1990");
} }

Личная часть класса не обязательно должна следовать в начале определения класса. Для обозначения отношения элементов структуры к личной части в произвольном месте определения класса перед ними можно использовать служебное слово private. Стандартным является размещение элементов данных в личной части, а функций-элементов -в общей части класса. Тогда закрытая личная часть определяет данные объекта, а функции-элементы общей части образуют интерфейс объекта "к внешнему миру" (методы).

Другие варианты размещения элементов данных и функций-элементов в личной и общей части класса встречаются реже:





-элемент данных в общей части класса открыт для внешнего использования как любой элемент обычной структуры;



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

Таким образом, в первом приближении класс отличается от структуры четко определенным интерфейсом доступа к его элементам.
И наоборот, структура - это класс без личной части. Объекты класса обладают всеми свойствами переменных, в том числе такими, как область действия и класс памяти (время жизни). Напомним, что по классам памяти в Си различают следующие виды переменных:

-статические и внешние, создаваемые в статической памяти программы и существующие в течение всего времени работы программы; -автоматические, создаваемые в стеке в момент вызова функции и уничтожаемые при ее завершении;


-динамические, создаваемые и уничтожаемые в свободной памяти задачи в моменты вызова функций malloc и free или выполнения
операторов new и delete .
Соответственно в программе возможно определение статических, автоматических и динамических объектов одного класса:

class dat
{ ....... }
dat a,b; // Статические объекты

dat *p; // Указатель на объект

void main()
{
dat c,d; // Автоматические объекты

p = new dat; // Динамический объект

delete p; // Уничтожение динамического объекта

} // Уничтожение автоматических объектов

Содержание раздела