Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_ekzamen_CPP.doc
Скачиваний:
26
Добавлен:
21.09.2019
Размер:
311.81 Кб
Скачать
  1. Указатель this. Спецификаторы доступа к членам класса.

По умолчанию функции класса имеют доступ к указателю с именем this, который указывает на объект, для которого эта функция вызвана. Можно сказать, что указатель this является неявным параметром каждой функции класса. В принципе, к любому члену класса, принадлежащему текущему объекту можно обратиться через этот указатель. Этот указатель используется в основном, для возврата указателя или ссылки на объект, к которому применяется функция класса.

Для ограничения доступа к членам класса вне его области видимости используются следующие спецификаторы доступа:

  1. private;

  2. public;

  3. protected;

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

По умолчанию все члены класса, объявленные после ключевого слова класс до первой метки, имеют спецификацию доступа private. Все члены класса, объявленные после слов struct или union имеют спецификацию доступа public.

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

  1. «Друзья» класса.

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

Отметим, что наличие дружественных функций нарушает принцип инкапсуляции и может привести к нежелательному изменению объекта класса. Объявление дружественной функции начинается с ключевого слова friend и может встречаться только внутри определения класса. Друзьями класса могут быть объявлены как обычные функции из некоторого пространства имён, так и функции-члены другого класса. Другом класса может быть объявлен целый другой класс. В этом случае доступ к закрытым членам класса допускается для всех функций этого друга-класса. При использовании друзей класса следует учитывать следующие правила:

  1. отношение дружбы не является симметричным, т.е., если A – друг класса B, то из этого не следует, что класс B есть друг класса А;

  2. отношение дружбы не является транзитивным, т.е., если класс А есть друг класса В, а класс В является другом класса С, то из этого не следует, что класс является другом класса С;

  3. отношение дружбы не наследуется, т.е., если класс А является другом класса С и предком класса В, то из этого не следует, что класс В является другом класса С.

Бесконечный цикл для структур:

While true

{printf (“Enter number”);

Printf (“1 – sozdanie struct”);

Printf (“2 – poisk svedenij”);

Printf (“3 – …”);

Printf (“7– exit”);

Scanf (“%d”, n);

Switch (n)

1: имя функции; break;

2: имя функции; break;

3: имя функции; break;

7: exit;

}

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