Синтаксис класса и объекта в Си++
В самом простом виде класс определяется в Си++ как структура, работа с элементами данных которой возможна только через функции-элементы. В отличие от структуры класс имеет " приватную" (личную) часть, элементы которой доступны только в функциях-элементах класса, и " публичную" (общую) часть, на элементы которой ограничения доступа не накладываются. Объектом называется переменная, типом которой является класс (структура):
.
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; // Уничтожение динамического объекта
} // Уничтожение автоматических объектов