Лекция: Классы и объекты

Класс — это совокупность данных различных типов и функций для их обработки с атрибутами доступа к ним.

— Синтаксис определения класса:

class cl //cl — имя класса (идентификатор типа)

{

atr: //atr — атрибут доступа (private, public, protected)

tip1 per1; //элементы-данные

[...]

tf1 f1(tp1 p1[,...]);//прототипы элементов-функций

[...] //… новые атрибуты и новые элементы

[...] //конструкторы и деструкторы

};

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

— Синтаксис объявления объекта класса: cl obj;

Атрибуты (спецификаторы доступа) осуществляют управление доступом к элементам класса:

— private — закрытые элементы, доступны только для элементов-функций данного класса и друзей класса;

— public — открытые элементы, доступны для любых функций;

— protected — защищенные элементы, доступны для элементов-функций данного класса и производных классов.

По умолчанию действует private.

Структуры и объединения рассматриваются как типы классов с атрибутом доступа public.

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

Пример:

//файл заголовков //файл кодов

class akt void akt::vvod()

{ {

void vvod(); ...

}; }

Элементами класса служат элементы-данные и элементы-функции.

Элементы-данные — это совокупность взаимосвязанных данных различных типов, объявленная в определении класса.

Элементы-данные характеризуются свойствами:

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

— не могут быть объектами данного класса, но могут быть указателями или ссылками на объекты данного класса;

— не могут быть явно инициализированы в теле класса (можно с помощью конструктора);

— не могут иметь спецификаторы auto, extern, register;

— могут иметь статический класс памяти static (существует только по одному экземпляру таких данных); они должны быть объявлены в определении класса в файле заголовков и определены в файле кодов, где могут быть инициализированы;

— могут быть именными константами (const); должны быть инициализированы (например, с помощью конструктора).

Пример:

//файл заголовков //файл кодов

class listok long listok::nadbavka;

{… ...

static long nadbavka;

const char* otdel;

};

Элементы-функции — это функции, объявленные в определении класса и обрабатывающие элементы-данные класса.

Элементы-функции характеризуются свойствами:

— определены внутри или вне определения класса;

— имеют доступ ко всем элементам данного класса;

— могут иметь статический класс памяти (static); такие функции могут обращаться только к статическим элементам класса и не могут быть объявлены const и virtual;

— могут быть константными (const ставится за списком параметров функции); такие функции не могут изменять значения элементов-данных класса.

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

Элементы класса имеют область действия этого класса. Доступ к элементам класса выполняется следующими способами:

— прямой доступ (по имени элемента) — из элементов-функций этого класса или из производных классов;

— через объект класса — из внешних функций или из других классов, например, во внешней функции имеем obj.sozdanie();, где obj — объект класса ved и sozdanie() — элемент-функция класса ved;

— через указатель на объект класса, например, pobj->vvod(), где pobj — указатель на объект obj класса akt (akt* pobj=&obj);

— через имя класса с операцией разрешения видимости (::), например, akt::chtenie_zap() или cena::chtenie_zap() при доступе из производного класса ved .

Схема доступа к элементам класса cl1 (без наследования):

class cl1 //внешняя функция или

{ //функция другого класса

private: cl1 obj; //или cl1* p=&obj;

int a; //доступ только к c и z()

void x(); //например,

protected: obj.z(); //или p->z();

int b; obj.c=10;//или p->c=10;

void y();

public:

int c;

void z();

}; //любая функция класса cl1 имеет доступ к a, x(), b, y(), c, z()

 

еще рефераты
Еще работы по информатике