Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_cpp.doc
Скачиваний:
10
Добавлен:
07.06.2015
Размер:
2.81 Mб
Скачать

Использование класса

Для того чтобы использовать класс, нужно объявить (создать) объект этого класса. Объекты класса определяются точно так же, как структурные или скалярные переменные. Объявление класса должно предшествовать использованию класса. Пользователю предоставляется описание класса, но не обязательно его внутренняя реализация. Чтобы объявить переменную (объект) people типа Counter, используется следующую запись:

Counter people; // аналогично объявлению любой переменной int a;

Counter* ptr // аналогично int* p;

Для вызова функции-члена объекта класса используется та же запись, что и для обращения к элементу структуры: за точкой следует имя элемента people.GetValue(). Аналогичен вызов и при использовании указателей ptr-> GetValue() В остальном использование функций-членов ничем не отличается от использования традиционных функций С.

Инкапсуляция. Управление доступом к членам класса

Класс включает как данные, так и функции (код). Доступ к элементам класса управляем. Это управление касается не только данных, но и кода.

Чтобы использовать класс необходимо знать, какие функции и какие данные доступны. Набор используемых функций и доступных данных называется пользовательским интерфейсом класса.

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

  • сам класс (функции-члены имеют прямой доступ к членам класса);

  • обычные пользователи (доступ из функции main() и функций);

  • производные классы (доступ из классов-наследников к членам базовых классов)

Каждый вид пользователей обладает разными привилегиями доступа. Каждый уровень привилегий доступа ассоциируется с определенным ключевым словом. Уровней привилегий доступа в С всего три, они определяются ключевыми словами:

  • private – закрытые члены класса;

  • protected – защищённые члены класса;

  • public открытые члены класса.

public - элемент может использоваться любой функцией и операторами программы;

private- элемент может использоваться только функциями-членами и "друзьями" класса, в котором они объявлены;

protected - то же самое, что для private, но кроме того, элемент может быть использован функциями–членами и функциями-«друзьями» классов, производных от объявленного класса.

Элементы класса по умолчанию имеют атрибут private, поэтому спецификаторы доступа public и protected должны задаваться явно.

Элементы struct по умолчанию имеют атрибут public, но вы можете переопределить доступ при помощи спецификаторов доступа private или protected.

Элементы union по умолчанию имеют атрибут publiс. Переопределить его нельзя. Задавать спецификаторы доступа для элементов объединения недопустимо.

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

class X {

int i; // X::i по умолчанию privаte

char ch; // X::ch аналогично Х::i

public:

int j; // следующие два

// элемента - public

int k; // открытые данные-члены

protected:

int l; // X::l - protected

};

struct Y {

int i; // Y::i по умолчанию public

private:

int j; // Y::j - private

public:

int k; // Y::k - public

};

union Z {

int i; // public по умолчанию,

// других вариантов нет

double d; }; // public

Спецификаторы доступа могут следовать и повторяться в любой удобной последовательности.

Пример:

class AccessControlExample {

int value_1; // приватные члены-класса по умолчанию, доступны только

void f_1 (long); //функциям – членам класса

private:

int value_2; // тоже приватные, доступны только

intf_2 (char *); //функциям–членам класса

public:

char* value_3; // общедоступные члены класса

long f_3 ();

protected:

int value_4; // защищенные члены, доступны только функциям – членам

void f_4 (long); //класса и классов-наследников (производных классов)

};

Приватные (private) члены класса имеют наиболее ограниченный доступ. Только сам класс или классы, объявленные как дружественные (friend) имеют доступ к приватным членам. Производные классы не имеют доступа к приватным членам родительского класса. Концепция сокрытия информации реализована в языке только частично, чтобы предотвратить нечаянный доступ к внутренним переменным или функциям класса, поскольку преднамеренный доступ можно всегда получить к любой части класса в обход обычных способов.

Для того, чтобы использовать общедоступные члены класса внутри функции, необходимо иметь доступ к данным-членам или функциям-членам или и к тому, и к другому. Чтобы сделать члены общедоступными, их нужно объявить в секции public.

Когда класс используется как базовый для других классов, можно сделать его члены доступными только для функций производных классов с помощью слова protected .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]