Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Классы и объекты



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

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

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()





Дата публикования: 2014-11-26; Прочитано: 283 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...