Языки программирования - концепции и принципы

допускает изменение доступности компонентов класса


     Язык C++ допускает изменение доступности компонентов класса при объявлении производного класса. Обычно порождение бывает общим (public). Так было во всех наших примерах, и при этом сохранялась доступность, заданная в базовом класс. Однако вы также можете задать приватное порожде­ние, тогда и общие, и защищенные компоненты становятся приватными:

class Airplanes {

protected:

      Airplane_Data database [100];

};

class Jets : private Airplanes {                                           // Приватное порождение

           void process_jet(int);

};

           void Jets::process_jet(int i)

{

            Airplane_Data d = database[i];                              // Ошибка, нет доступа

};

Пакеты-дети в языке Ada



В языке Ada только тело пакета имеет доступ к приватным объявлениям. Это делает невозможным непосредственное совместное использование пакетами приватных объявлений так, как это можно делать в языке C++ с защищенны­ми объявлениями. В языке Ada 95 для совместного использования приватных объявлений доставлено специальное средство структурирования, так называ­емые пакеты-дети (child packages). Здесь мы ограничим обсуждение пакетов-детей только для этой цели, хотя они чрезвычайно полезны в любой ситуации, когда вы хотите расширить существующий пакет без его изменения или пере­компиляции.

     Зададим приватный тип Airplane_Data, определенный в пакете:

package Airptane_Package is

       type Airplane_Data is tagged private;

private

       type Airplane_Data is tagged

           record

               ID:String(1..80);

              Speed: Integer range 0.. 1000;

              Altitude: Integer 0.. 100;

            end record;

end Airplane_Package;

Этот тип может быть расширен в пакете-ребенке:

package Airplane_Package.SST_Package is

      type SST_Data is tagged private;

      procedure Set_Speed(A: in out SST_Data; I: in Integer);

 private

      type SST.Data is new Airplane_Data with


Содержание раздела