C++ за 21 день седьмое издание



Download 1,38 Mb.
bet200/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   196   197   198   199   200   201   202   203   ...   437
Bog'liq
word1

8 :

};







9:










10:

c la s s T u n a:p u b lic

F ish




  • {




    1. p u b lic :

    13: v o id Swim()

    1. {

    15: cout « "Tuna swims f a s t in th e se a !" « en d l;

    1. }




    1. };



    18:
    19: c la s s C a rp :p u b lic F ish

    1. {




    1. vo id Swim()

    2. {

    23: cout « "Carp swims slow in th e la k e !" « en d l;



    1. }




    ЮЗак. 3626

    290 ЗАНЯТИЕ 11. Полиморфизм



    1. };








    1. void MakeFishSwim(Fish& inputFish)




    1. {



    2 9: inputFish.Swim();



    1. }








    1. int main()




    1. {




    1. // Fish myFish; // Ошибка, нельзя создать экземпляр




      1. абстрактного класса




    1. Carp myLunch;




    1. Tuna myDinner;



    37:



    1. MakeFishSwim(myLunch);




    1. MakeFishSwim(myDinner);








    1. return 0;




    1. }



    Результат


    Carp swims slow in the lake!


    Tuna swims fast in the sea!


    Анализ

    Сущ ественна первая (закомментированная) строка функции m ain () (строка 34). Это демонстрирует, что компилятор не позволит создать экземпляр класса F is h . Он ожи­ дает чего-то более конкретного, такого, как специализация класса F is h (класса Tuna, например), что имеет смысл и в реальности. Благодаря чистой виртуальной функции F i s h :: Swim (), объявленной в строке 7, оба класса, Tuna и C arp, вынуждены реализовать методы T u n a : : Swim () и C a r p : : Swim () соответственно. Строки 27 -30, где реализован метод M akeFishSw im (F ish & ), демонстрируют, что, хотя экземпляр абстрактного класса





    1. не может быть создан, ссылку или указатель на него вполне можно использовать. Таким образом, абстрактные классы — это очень хороший способ потребовать от всех произво­ дных классов реализации определенных функций. Если в классе T ro u t (форель), произ­ водном от класса F is h , забыть реализовать метод T r o u t :: Swim (), компиляция потерпит неудачу.

    ПРИМЕЧАНИЕ
    Абстрактные базовые классы
    (Abstract Base Class) зачастую называют просто

    АВС.


    Классы АВС накладывают на ваш проект или программу определенные ограничения.











    Использование виртуального наследования для решения проблемы ромба

    На занятии 10, “Реализация наследования”, мы рассмотрели любопытный случай утко­ носа, который является млекопитающим, но частично и птицей, и рептилией. В этом слу­ чае класс утконоса P la t y p u s должен происходить от классов Mammal, B i r d и R e p t il e . Однако каждый из них, в свою очередь, происходит от более обобщенного класса, A n im a l животное), как показано на рис. 11.2.

    РИС. 11.2. Схема класса утконоса, демонстрирующего множественное наследование

    Так что же произойдет при создании экземпляра класса P la t y p u s ? Сколько экземпля­


    ров класса A n im a l получится в одном экземпляре класса P la t y p u s ? Листинг 11.7 помо­


    жет ответить на этот вопрос.


    ЛИСТИНГ 11.7. Проверка количества экземпляров базового


    -ласса Animal в одном экземпляре класса Platypus________________________________





    1. #include




    1. using namespace std;







    Download 1,38 Mb.

    Do'stlaringiz bilan baham:
  • 1   ...   196   197   198   199   200   201   202   203   ...   437




    Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
    ma'muriyatiga murojaat qiling

    kiriting | ro'yxatdan o'tish
        Bosh sahifa
    юртда тантана
    Боғда битган
    Бугун юртда
    Эшитганлар жилманглар
    Эшитмадим деманглар
    битган бодомлар
    Yangiariq tumani
    qitish marakazi
    Raqamli texnologiyalar
    ilishida muhokamadan
    tasdiqqa tavsiya
    tavsiya etilgan
    iqtisodiyot kafedrasi
    steiermarkischen landesregierung
    asarlaringizni yuboring
    o'zingizning asarlaringizni
    Iltimos faqat
    faqat o'zingizning
    steierm rkischen
    landesregierung fachabteilung
    rkischen landesregierung
    hamshira loyihasi
    loyihasi mavsum
    faolyatining oqibatlari
    asosiy adabiyotlar
    fakulteti ahborot
    ahborot havfsizligi
    havfsizligi kafedrasi
    fanidan bo’yicha
    fakulteti iqtisodiyot
    boshqaruv fakulteti
    chiqarishda boshqaruv
    ishlab chiqarishda
    iqtisodiyot fakultet
    multiservis tarmoqlari
    fanidan asosiy
    Uzbek fanidan
    mavzulari potok
    asosidagi multiservis
    'aliyyil a'ziym
    billahil 'aliyyil
    illaa billahil
    quvvata illaa
    falah' deganida
    Kompyuter savodxonligi
    bo’yicha mustaqil
    'alal falah'
    Hayya 'alal
    'alas soloh
    Hayya 'alas
    mavsum boyicha


    yuklab olish