Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лек_3_слайды.doc
Скачиваний:
1
Добавлен:
17.11.2019
Размер:
457.73 Кб
Скачать

Void fв(void);

// “ ”

//внешние оп-ры не могут вызывать fв()

public:

int C;

// Доступен любим членам и всем,

//кто его использует

Void fc(void);

// “ ”

};

Член А закрыт в TAnyClass и доступен только другим членам этого класса, т.е.

функции-члены fa(), fb() и fc() имеют непосредственный доступ к А.

Конечно, внешние операторы и даже функции-члены производных классов не могут ссылается на А непосредственно. Вдобавок, функция-член fa(), может вызваться только другими членами TAnyClass. Внешние операторы не могут вызывать функцию-член fa(), являющуюся исключительной “частой собственностью” TAnyClass.

Член В и функция-член fb() защищены и доступны другим членам TAnyClass,

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

функции-члену fb().

Член С и функция-член fc() открыты и свободны для прямого доступа всем членам TAnyClass, членов производных классов и оператором вне класса.

Открытые члены класса всегда доступные для всех, кто использует этот класс.

Спецификаторы доступа private, protected, и public могут также предшествовать имени базового класса в объявлении производного класса.

ПРИМЕР производного класса, основанного на TAnyClass

class TDerived: public TAnyClass {

// Новые данные-члены,

//функции-члены, конструкторы etc.

};

Спецификатор public можно заменить на private или protected.

По умолчанию члены наследуемого класса закрыты.

Влияние спецификатора на статус наследуемых членов.

  • Члены открытого базового класса в производном классе сохраняют свои спецификации доступа public, protected и private.

  • Открытые члены защищенного базового класса становятся защищенными в производном классе. Защищенные и закрытые члены сохраняют свои первоначальные спецификации доступа.

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

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

class TBase {

protected:

int x;

public:

int y;

};

производный класс

class TDerived: private TBase {

// Обратите внимание на статус

//private

public:

Void f (void);

// f() имеет доступ к членам x и y

//статус членов x и y изменился

//на private,

//т.к.TBase объявлен закрытым

//базовым классом

};

функция-член f() имеет доступ к членам x и y, наследованным из класса TBase. Однако, поскольку TBase объявлен закрытым базовым классом для класса TDerived, статус членов x и y изменился на private.

В наследовании

class TDescendant: public TDerived {

public:

Void g(void);

//g() не имеет доступа к членам x и y

};

функция-член g() не имеет доступа к членам x и y несмотря на то, что первоначально эти члены имели статус protected и public.

Квалификация доступа к отдельным членам

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

пример

class A {

public:

int x;

A() { count <<

Inside A’ s constructor\n”; x = 0; }

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