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



Download 1,38 Mb.
bet186/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   182   183   184   185   186   187   188   189   ...   437
Bog'liq
word1

#include




    1. using namespace std;




    1. class FishDummyMember



{



    1. public:




  1. FishDummyMember ()

{


    1. cout « "FishDummyMember constructor" « endl;




  1. }



.1: -FishDummyMember()

-I: {


  1. cout « "FishDummyMember destructor" « endl;



-5: };


class Fish

-3: {
3 6: protected:





  1. FishDummyMember dummy;




  1. public:




  1. // Конструктор класса Fish



3 4: Fish()

:=: {
36: cout « "Fish constructor" « endl;




3~: }





-Fish()

264 ЗАНЯТИЕ 10. Реализация наследования



  1. {




  1. cout « "Fish destructor" « endl;




  1. }




  1. };



34:



  1. class TunaDummyMember




  1. {




  1. public:




  1. TunaDummyMember()




  1. {




  1. cout « "TunaDummyMember constructor" « endl;




  1. }



42:



  1. -TunaDummyMember()




  1. {




  1. cout « "TunaDummyMember destructor" « endl;




  1. }




  1. };



48:


49:



  1. class Tuna: public Fish




  1. {




  1. private:




  1. TunaDummyMember dummy;








  1. public:




  1. Tuna()




  1. {




  1. cout « "Tuna constructor" « endl;




  1. }




  1. -Tuna()




  1. {




  1. cout « "Tuna destructor" « endl;




  1. }



64:

  1. };

6 6 :

  1. int main()




  1. {




  1. Tuna myDinner;




  1. }



Результат


FishDummyMember constructor


Fish constructor


TunaDummyMember constructor


Tuna constructor


Tuna destructor


TunaDummyMember destructor


Fish destructor


FishDummyMember destructor

Закрытое наследование

265



Анализ

Функция m ain (), представленная в строках 67 -70, поразительно мала для объема создаваемого ею вывода. Создания экземпляра класса T una достаточно для этих строк вывода, поскольку операторы с o u t вставлены в конструкторы и деструкторы всех задей­ ствованных объектов. Для демонстрации создания и удаления переменных определены два вымышленных класса, FishDummyMember и TunaDummyMember, с операторами c o u t





  1. конструкторах и деструкторах. Классы F is h и Tuna содержат члены для каждого из этих вымышленных классов (строки 20 и 53). Вывод указывает, что создание объекта класса Tuna фактически начинается сверху иерархии. Так, часть базового класса F is h в составе класса Tuna создается первой, при этом такие его члены, как F i s h : : dummy, создаются сначала. Далее следует конструктор класса F is h , который естественно выполняется после создания таких атрибутов, как dummy. После создания экземпляра базового класса созда­ ние экземпляра Tuna продолжается созданием экземпляра T u n a : : dummy и завершается выполнением кода конструктора T u n a : : Tuna (). Вывод демонстрирует, что последова­ тельность удаления прямо противоположна.

Закрытое наследование


Закрытое наследование (private inheritance) отличается от открытого (которое рассма­ тривалось до сих пор) тем, что в строке объявления производного класса как происходя­ щего от базового класса используется ключевое слово p r i v a t e :


class Base

{
// ... переменные-члены и методы базового класса


};


class Derived: private Base // закрытое наследование

{
// ... переменные-члены и методы производного класса


};


Закрытое наследование базового класса означает, что все открытые члены и атрибуты базового класса являются закрытыми (т.е. недоступными) для всех, кроме экземпляра про­ изводного класса. Другими словами, даже открытые члены и методы класса B ase могут быть использованы только классом D e riv e d , но ни кем-либо, еще владеющим экземпля­ ром класса D eriv e d .

Это резко контрастирует с примерами класса Tuna и его базового класса F is h , ко­ торые мы рассматривали начиная с листинга 10.1. Ф ункция m a i n ( ) в листинге 10.1 может вызвать функцию F i s h : :Swim() у экземпляра класса Tuna, поскольку функция Гi s h : : Swim () является открытым методом и потому, что класс Tuna происходит от клас­ са F is h с использованием открытого наследования. Попробуйте переименовать ключевое слово p u b l i c на p r i v a t e в строке 17, и вы получите сбой компиляции.


Таким образом, для мира вне иерархии наследования закрытое наследование по суще­ ству не означает отношение есть (is-a) (вообразите тунца, который не может плавать!). Поскольку закрытое наследование позволяет использовать атрибуты и методы базового класса только производным классам, которые происходят от него, создаются отношения,

266 ЗАНЯТИЕ 10. Реализация наследования





Download 1,38 Mb.

Do'stlaringiz bilan baham:
1   ...   182   183   184   185   186   187   188   189   ...   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