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

Ранее обсуждалось порождение классов от


Ранее обсуждалось порождение классов от одного базового класса, так что се­мейство классов образовывало дерево. При объектно-ориентированном про­ектировании, вероятно, класс будет иметь характеристики двух или несколь­ких существующих классов, и кажется допустимым порождать класс из не­скольких базовых классов. Это называется множественным наследованием (multiple inheritance). На рисунке 15.1 показано, что Airplane (самолет) может



быть многократно порожден из Winged_Vehicle (летательный аппарат с крыльями) и Motorized_Vehicle (летательный аппарат с мотором), в то время как Winged_Vehicle также является (единственным) базовым классом для Glider (планер). Задав два класса:

class Winged_Vehicle {

public:

    void display(int);

C++

protected:



      int Wing_Length;                               // Размах крыла

      int Weight;                                         // Bec

};

class Motorized_Vehicle {

public:

      void display(int);

protected:

      int Power;                                   // Мощность

       int Weight;                                // Bec

};

можно породить класс с помощью множественного наследования:

class Airplane:

C++

       public Winged_Vehicle, public Motorized_Vehicle {

public:

          void display_all();

};

Чтобы использовать множественное наследование, необходимо решить, что делать с данными и операциями, такими как Weight и display, которые насле­дуются из нескольких базовых классов. В языке C++ неоднозначность, вы­званная многократно определенными компонентами, должна быть явно раз­решена с помощью операции уточнения области действия:

void Airplane: :display_all()

{

C++

         Winged_Vehicle::display(Wing_Length);

          Winged_Vehicle::display(Winged_ Vehicle:: Weight);

          Motorized_ Vehicle:: display(Power);

          Motorized_ Vehicle:: display(Motorized_ Vehicle:: Weight);


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