Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП 1-3 лекции.docx
Скачиваний:
10
Добавлен:
18.11.2019
Размер:
55.63 Кб
Скачать
    1. Уровни видимости

Уровень_видимости задается одним из трех ключевых слов: private[‘прайвит], protected[прэ’тэктид], public[‘паблик]. Порядок следования их произволен, они могут появляться неоднократно или отсутствовать в определении класса. Область действия каждой части продолжается до тех пор, пока в определении класса не появится метка другой части или не будет обнаружен конец описания класса.

  • private - определяет закрытую часть класса, недоступную извне класса.

  • protected - пока для нас аналогичен private; различия между ними проявляются при использовании наследования.

члены класса, помещенные в закрытую или защищенную части класса, доступны только изнутри класса (т.е. из функций-членов класса).

  • public - определяет открытую часть класса, видимую и доступную извне класса.

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

Пример определения класса на языке C++:

а) с использованием class б) с использованием struct

class X{ struct X{

private: private:

. . . a1 . . . . . . a1 . . .

protected: protected:

. . . a2 . . . . . . a2 . . .

public: public:

. . . a3 . . . . . . a3 . . .

. . . f() . . . . . . f() . . .

}; };

Объявляем данное типа (нового) X - в соответствии с обычными правилами (не зависимо от того, как определен класс - с помощью class или struct):

X obj;

Доступ к членам класса записывается в соответствии с общими синтаксическими правилами языка С аналогично доступу к членам структуры - через операцию “точка” (например, obj.a2 или obj.f()), но результат будет зависеть от уровней видимости частей класса.

Так, конструкции obj.a1, obj.a2 - вызовут сообщения об ошибке (члены класса a1 и a2 не видны (не доступны) извне класса); obj.a3, obj.f() - корректны. Внутри функции - метода класса f() можно без опасений использовать все имена: a1, a2, a3 и f().

Если в начале определения класса отсутствует указание уровня видимости: class A{... x ...}; или struct A{ ... x ... };, то:

  • для class принимается private: class A{private: ... x ...};;

  • для struct принимается public: struct A{ public: ... x ... };.

Рекомендации по поводу использования уровней видимости при определении класса.

Описания_полей_класса и прототипы_функций определяются в соответствии с обычными правилами С (С++).

    1. Методы класса

Два способа классификации методов класса:

А) По функциональному назначению:

  • конструкторы - для создания экземпляров класса

  • деструкторы - для уничтожения экземпляров класса

  • селекторы - обработка состояния класса без его изменения

  • модификаторы - изменение состояния класса

  • итераторы - последовательный доступ к элементам данных, определяющих состояние класса

Б) По организации доступа к закрытой и защищенной частям класса:

  • функция-член класса - функция, принадлежащая самому классу и не существующая вне класса

  • функция-друг класса - внешняя по отношению к классу функция, которая может существовать вне класса, но имеет доступ к закрытой (и защищенной) части класса

Пока используем только функции-члены класса.

Конструкторы и деструктор класса имеют специфический синтаксис, другие методы класса - обычный.