Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Класс - это совокупность данных различных типов и функций для их обработки с атрибутами доступа к ним.
- Синтаксис определения класса:
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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!