►Механизм, множественного наследования...298

Чтобы увидеть множественное наследование в действии, я продолжу пример с диваном-кроватью. На рис. 26.1 приведена схема наследования дивана-кровати ( класс SleeperSofa ). Обратите внимание, что этот класс наследует свойства и от класса Bed ( Кровать ), и от класса Sofa ( Диван ), т.е. наследует свойства обоих классов.

   

Рис. 26.1. Иерархия классов дивана-кровати

_________________

298 стр. Часть 5. Полезные особенности

Программная реализация класса SleeperSofa выглядит следующим образом.

    //

    /* MultipleInheritance — класс, являющийся наследником */

    /*                        нескольких базовых классов */

    //

    #include <cstdio>

    #include <cstdlib>

    #include <iostream>

    using namespace std ;

    class Bed

    {

      public :

        Bed( ) { }

        void sleep( ) { cout << "Спим" << endl ; }

        int weight ;

    } ;

    class Sofa

    {

      public :

        Sofa( ) { }

        void watchTV( ) { cout << "Смотрим телевизор" << endl ; }

        int weight ;

    } ;

    /* SleeperSofa — диван-кровать */

    class SleeperSofa : public Bed , public Sofa

    {

      public :

        SleeperSofa( ) { }

        void foldOut( ) { cout << "Раскладываем диван-кровать"

                                << endl ; }

    } ;

    int main( int nNumberofArgs , char* pszArgs[ ] )

    {

            /* печать кириллицы, если Вы не установите программки gccrus.exe и g++rus.exe */

            setlocale ( LC_ALL , ".1251" ) ;

        SleeperSofa ss ;

        /* Посмотрим телевизор на диване... */

        ss.watchTV( ) ; /* Sofa::watchTV( ) */

        /* ...разложим его в кровать... */

        ss.foldOut( ) ; /* SleeperSofa::foldOut( ) */

        /* ...и ляжем спать */

        ss.sleep( ) ;

        /* Пауза для того, чтобы посмотреть на результат работы программы */

        system( "PAUSE" ) ; return 0 ;

    }

В этом примере класс SleeperSofa наследует оба класса — Bed и Sofa. Это видно из их наличия в объявлении класса SleeperSofa, который наследует все члены от обоих базовых классов. Таким образом, допустимы оба вызова — как ss.sleep( ), так и ss.watchTV( ). Вы можете использовать SleeperSofa и как Bed, и как Sofa. Кроме того, класс SleeperSofa имеет собственные члены, например foldOut( ). В результате мы получим следующий вывод программы:

    Смотрим телевизор

    Раскладываем диван-кровать

    Спим

    Press any key to continue...

_________________

299 стр. Глава 26. Множественное наследование