Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / C / C++ / Введение в язык C++ / Производные Классы /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Производные Классы - Программирование от RIN.RU
Производные Классы



Видимость


Класс employee стал открытым (public) базовым классом класса manager в результате описания:


class manager : public employee {
// ...
};


Это означает, что открытый член класса employee является также и открытым членом класса manager.


Например:


void clear(manager* p)
{
p->next = 0;
}


будет компилироваться, так как next - открытый член и employee и manager"а. Альтернатива - можно определить закрытый (private) класс, просто опустив в описании класса слово public:


class manager : employee {
// ...
};


Это означает, что открытый член класса employee является закрытым членом класса manager. То есть, функции члены класса manager могут как и раньше использовать открытые члены класса employee, но для пользователей класса manager эти члены недоступны. В частности, при таком описании класса manager функция clear() компилироваться не будет. Друзья производного класса имеют к членам базового класса такой же доступ, как и функции члены.


Поскольку, как оказывается, описание открытых базовых классов встречается чаще описания закрытых, жалко, что описание открытого базового класса длиннее описания закрытого. Это, кроме того, служит источником запутывающих ошибок у начинающих.


Когда описывается производная struct, ее базовый класс по умолчанию является public базовым классом. То есть,


struct D : B { ...


означает


class D : public B { public: ...


Отсюда следует, что если вы не сочли полезным то скрытие данных, которое дают class, public и friend, вы можете просто не использовать эти ключевые слова и придерживаться struct. Такие средства языка, как функции члены, конструкторы и перегрузка операций, не зависят от механизма скрытия данных.


Можно также объявить некоторые, но не все, открытые $ члены базового класса открытыми членами производного класса. Например:


class manager : employee {
// ...
public:
// ...
employee::name;
employee::department;
};


Запись


имя_класса :: имя_члена ;


не вводит новый член, а просто делает открытый член базового класса открытым для производного класса. Теперь name и department могут использоваться для manager"а, а salary и age - нет. Естественно, сделать сделать закрытый член базового класса открытым членом производного класса невозможно. Невозможно с помощью этой записи также сделать открытыми перегруженные имена.


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


<<<  НазадВперед  >>>
 1  2  3  4  5  6 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Введение

Альтернативные Интерфейсы

Добавление к Классу

Неоднородные Списки

Законченная Программа

Свободная Память

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь