Управление доступом к элементам класса — КиберПедия 

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Управление доступом к элементам класса

2018-01-03 625
Управление доступом к элементам класса 0.00 из 5.00 0 оценок
Заказать работу

Основное различие между классами С++ и структурами С состоит в пра­вилах доступа к их элементам. Элементы структуры языка С доступны для лю­бого выражения или функции из их области действия. В С++ имеется возмож­ность управления правами доступа к элементам структуры, объединения или класса. Элементы класса получают атрибуты доступа либо по умолчанию, либо при использовании спецификаторов доступа, которые имеют следующие наименования и значения:

public (общий, открытый) – элемент может быть использован любой функцией;

private (частный, закрытый) – элемент доступен только методам класса и "друзьями " класса, в котором они объявлены;

protected (защищенный) – то же, что и private, однако элемент может быть использован методами и друзьями классов, производных от объявленного класса, но только в объектах производного класса.

Когда говорят о классах в С++, то включают в это понятие не только тип данных class, но также struct и union со своими правами доступа.

Для типа class все компоненты являются по умолчанию private, но можно изменить уровень доступа; для типа ctruct все компоненты по умолчанию — public, но можно изменить права доступа; для типа union все компоненты по умолчанию — public и этот уровень не может быть изменен.

Обычно ограничения на уровень доступа касаются элементов данных: как правило, данные имеют атрибут private, а методы – public. Этим ограничени­ям больше соответствует класс с ключевым словом class, который и использу­ется для разработки классов в программах.

Режим доступа (по умолчанию или заданный) действует для последую­щих объявлений элементов класса, пока не встретится другой атрибут доступа в любом порядке, например:

 

class X // заголовок класса

{ int i; // private по умолчанию

char ch;

public: // общий

int j, k;

protected: // защищенный

int m;

}; // определение класса заканчивается точкой с запятой (;)

 

Список элементов класса

Список элементов представляет собой последовательность объявлений данных (любого типа, включая нумераторы, битовые поля и другие классы) и объявлений и определений функций, каждое из которых может иметь необяза­тельные модификаторы доступа. Определенные таким образом объекты называ­ют элементами (членами) класса (class members). Специфика­торы класса памяти auto, register, extern недопустимы. Элементы могут быть объявлены со спецификатором static.

Функция-элемент класса называется методом класса, а функция с моди­фикатором friend называется дружественной функцией. Данные класса – это то, что класс "знает " (пассивная часть класса), а методы – это то, что класс "умеет делать" (активная часть).

Определение методов класса

 

Существует два способа включения метода в класс.

Первый способ – метод может быть определен внутри класса как встраи­ваемая функция с одним-двумя операторами. Компилятор осуществляет макро­расширение таких функций, снижая накладные расходы, связанные с обращени­ем к функции и выходом из нее, например:

class Point

{ int X, Y;

int Getx() { return X; } // встроенная функция

}

 

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

class Point

{ int X, Y;

int Getx(); // объявление метода

}

int Point:: Getx() // определение метода

{ return X; } // вне класса

 

Имя Point:: Getx называется полным или квалифицированным именем метода класса. В С++ разные функции могут иметь функции с одинаковыми именами. Операция:: и имя класса позволяют компилятору определить принад­лежность функции конкретному классу.

Определение метода внутри класса (способ 1) не требует модификатора Point::, так как и так очевидно, что Getx принадлежит классу Point. Кроме того, модификатор Point:: перед Getx служит и другой цели. Он определяет, что переменная Х в операторе return X является собственным элементом класса Point, к которому можно обращаться непосредственно по имени.

Вывод. Тело метода Point::Getx() находится внутри области действия класса Point вне зависимости от физического расположения. Метод Getx() имеет доступ ко всем внутренним переменным класса Point.

 


Поделиться с друзьями:

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.011 с.