Главная » Просмотр файлов » Г. Шилдт - Полный справочник по C++

Г. Шилдт - Полный справочник по C++ (1109478), страница 67

Файл №1109478 Г. Шилдт - Полный справочник по C++ (Г. Шилдт - Полный справочник по C++) 67 страницаГ. Шилдт - Полный справочник по C++ (1109478) страница 672019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 67)

Наследование рцЬ11с: чо[д веа(1па а, 1па Ь) [ 1=а; З=Ь! ) чо[д знои() ( аоца « х « " « 1 « "1п"; ) // теперь все члены класса Ьаве являются закрытыми членами // класса йех1чед1. а1авв дехтчед1 : рхьчаае Ьаве ( юпс ун рцЫьс: // Зто делать можно, поскольку переменные 1 и 1 являютая закрытыми членами класса дехьчед1. чово зеСК() [ к = 1*1: ) // ОК чо1д ьбоиК[) [ соца « к « 1п"; ): // Доступ к членам 1, 1, веа() и знои() не наследуется. с1азв дех1чей2 : рцЫ1с дехьчед1 ( 1гш в; рцЫ 1с: // Неправильно, так как переменные 1 и 1 являются закрытыми // членами класса дех1чед1 чоыд аеав() ( в = .1-2; ) // Ошибка чо1д значка(] [ соца « в « "1п": ) )у 1пс ваьп() ( дех1чед1 оЬ1; йех1чей2 оЬ2; оЬ1.аеа(1, 2); // Ошибка, вызывать функцию вес() нельзя.

оЬ1.виоы(); // Овибка, вызывать функцию ьЬои(] нельзя. оЬ2.зеа(3, 4); // Ошибка, вызывать Функцию вес() нельзя. оЬ2.зЬои(); // Ошибка, вызывать Функцию знои() нельзя. хесцлп см ) Даже если бы к классу аааа применялось закрытое наследование, ювсс аакзчааз по-прежнему имел бы досгпуп к его открытым и защищенным членам. Однако зти привилегии другим наследникам не передаются. Защищенное наследование К базовому классу можно применять механизм защищенного наследования.

При этом все открытые и защищенные члены базового класса становятся защищенными членами производного класса. Рассмотрим пример. $1пс1цде <1озатеав> ца1пд павевраае всд; с1авз Ьаве ( рхоаесаед: 1па 1, 1; // Закрытые члены класаа Ьаве, // доступные классу дех1чей. Часть П. Язык С+[ рцЬ11с: ъоьй вехьз(зпс а, хох Ы ( 1--а; 5--.Ь; чоьй вноы11() ( соьс «1 « ' " «з «1п'; ) ): // Класс, полученныи с помошью зашишенного наследования. с1авв йеххчей : рхоеесеей Ьаве ( юе)п рцЬ11с ". // Класс йехьчей имеет доступ к членам 1, З и весь) () // из класса Ьаве. чогй веск() ( весь)(10, 12); к = 1*З: ) // Отсюда можно вызвать функцию вноы1)().

чоьй вноыа11() ( соне « к « " "'; вноиьЗ(); ) ); 1пх та1п() ( йехгуей оЫ // оЬ,весь) (2, 3); // Неверно, функция вее11 () является // закрытым членом класса йехьчей. оЬ.вехи(); // Верно, вызывается открытьй член класса йеххчей. оЬ.вноыа11(); // Верно, вызывается открытый член класса йеххчей. // оЬ.вноы1)()," // Неверно, функция вноых)() является // зашишенным членом класса йех1чей хехцхп О; ) как следует из комментариев, несмотря на то что функции вее15() и вьомзз () являются открытыми членами класса Ьавв, в классе йехачей, образованном с помощью защищенного наследования, они становятся защищенными. Это значит, что в функции юа1п(] они не доступны.

.'4 Множественное наследование Производный класс может одновременно наследовать свойства нескольких базовых классов. Например, в программе, приведенной ниже, класс йех3лей наследует свойства классов Ьавез и Ьавез. // Пример множественного наследования. Вьпс1цйе <зовехеаю> цв1пд паюеврасе вЫ; с1авв Ьаве1 рхохесеей: 1пе х; рцЬ11с: чохй вномх() ( соне « х « 1п'р ) ); Глава 16. Наследование а1авв Ьаве2 ( рхосессеб: ьпс у; риЫ1а: чо1с) висну О (соис «у « "хп"; ) // Множеагвенное наследование. с1авв бетьчесп риЬ11а Ьаве1, риЬ11а Ьаве2 ( риЫьс: чо10 вес(1пс 1, 1пс 3) ( х=1; У=З; ) ): 1пс иа1п() ( бехьчеб ОЬ; оЬ.вес(10, 20); // Зта Функция принадлежит класау бетьчеб. оЬ.виоих(); // Зта функция принадлежит классу Ьаве1.

оЬ виану О; // Зта функиия принадлежит классу Ьаве2. еесиеп 0; ) Как видим, при множественном наследовании имена базовых классов перечисляются в списке и разделяются запятыми, причем перед каждым именем базового класса указывается свой спсцификатор доступа. ~$~~ Конструкторы, деструкторы и наследование В связи с наследованием возникают два вопроса, касающиеся конструкторов и деструкторов. Во-первых, когда вызываются конструкторы и деструкторы базового и производного классов? Во-вторых, как передаю~ел параметры конструкторов базового класса? Ответы на зти вопросы содержатся в следующем разделе. Когда вызываются конструкторы и деструкторы Базовый и производный класс могут содержать несколько конструкторов и деструктор.

Следовательно, очень важно правильно понимать, в каком порядке они вызываются при создании и уничтожении обьектов производного класса. Для начала рассмотрим слелуюший пример. Фьпс1ибе <1овстеап> ив1пй патевраае всс); с)авв Ьаве ( риЫ1с: Ьаве() ( аоис « "Создается объект класаа Ьавеуп"; ) -Ьаве() ( соис « "уничтожается объект клааса Ьавехп ; ) ); с1авв дегьчеб: риЫьс Ьаве ( риЬ11с: бееьчеб() ( соис « "Создается объект класса дегьчеб1п ; ] -дехьчеб() ( аоис « "Уничтожается объект класса с(ет1чес)хп"; )) Часть П. Язык С++ 1пс ваъп() ( йегъчей оЬ; Кроме создания и уничтожения объекта, ничего не происходит гесогп О; Как указано в комментарии к функции жаьп(), программа просто создает, а затем уничтожает объект оЪ класса йекъчей.

В ходе выполнения программа выводит на экран следующие сообщения. Создание объекта класса Ьаве Создание объекта класса йегхчей Уничтожение объекта класса йегхчей Уничтожение объекта класса Ьаве Как видим, сначала вызывается конструктор базового класса, а затем — производного. После этого, поскольку объект оЬ немелленно уничтожается, вызывается деструктор класса йекдчей, а за ним — деструктор класса Ьаве. Результаты этого эксперимента можно обобщить.

При создании объекта производного класса сначала вызывается конструктор базового класса, а потом — производного. При уничтожении обьекта производного класса сначала вызывается деструктор производного класса, а затем — базового. Иначе говоря, конструкторы вызываются в иерархическом порядке, а дес>рукторы — в обратном. Это вполне естественно Поскольку базовый класс не имеет никакой информации о производных классах, инициализация его объектов должна выполняться до инициализации любого объекта производного класса. Следовательно, конструктор базового класса должен вызываться первым.

Вполне очевидно, что деструкторы должны вызываться в обратном порядке. Поскольку производный класс наследует свойства базового, уничтожение объекта базового класса вызовет уничтожение объекта производного класса. Следовательно, деструктор производного класса должен вызываться до полного уничтожения обьекта При иерархическом наследовании (когда производный класс становится базовым для своего наследника) применяется следующее правило: конструкторы вь>зь>ва>отея в иерархическом порядке, а деструкторы — в обратном. Рассмотрим пример. М1пс1ийе <ъовсгеавж из1пд пал>еврасе вой> с1авв Ьаве ( риЫ>.с > Ьаве() ( соус « "Создание объекта класса Ьаве1п" > ) -Ьаве() ( свис « "Уничтожение объекта класса Ьаве>>п"> ) )> с1авв йегъчей1 : риЬ11с Ьаве риЬ1>.с > йег1чей1() ( соос « "Создание объекта класса йегъчей11п"> -йегъчей1() ( соне « "Уничтожение объекта класса йегъчей11п"> ) )> с1авв йег1чей2 > роЫ1с йег1чей1 ( риЫ1с > йегъчей2() ( соус « "Созлание объекта класса йехъчей21п"> ) -йегъчей2() ( свис « "Уничтожение объекта класса йех1чей21п"> ) ); Глава 16.

Наследование 1пг паап() йег1чей2 оЬ; // Создаем и уничтожаем объект оЬ гегигп О; ) В результате на экран выводятся следующие строки. Создание объекта класса Ьаве Создание объекта класса йег1чей1 Создание объекта класса йег1чей2 Уничтожение объекта класса йеггчей2 уничтожение объекта клааса йегзчей1 Уничтсвкение объекта класса Ьаве Это правило применимо и к множественному наследованию.

рассмотрим следуюшую программу. Кзпс1ийе <1оясгеатж ив1пд пажевраае всй; с1авв Ъаве1 риЫ1с: Ьаве1() ( сонг « "Создание объекта клааса Ьаве11п"; ) -Ьаве1() ( соис « "Уничтожение объекта класса Ьаве11п"; с1авв Ьаве2 ( риЬ11с: Ьаве2() ( соиг <к " Создание объекта клааса Ьаве21п"; ) -Ьаве2() ( соис « " Создание объекта клаааа Ьаве2М"; ) ); с1авв йегьчей: риЫ1а Ъаве1, риЫьс Ьаве2 ( риЬ) за: йегьчей() ( сонг « " Создание объекта класаа йег1чей1п ; ) -йег1чей() ( сонг « " Уничтожение объекта клаоаа йег1чей1п"; ) ); 1пе жа1п ( ) ( йегзчей оЬ; /Г Создание и уничтожение объекта оЬ гесигп Ор ) Зта программа вылает на экран следуюшие сообшения.

Создание объекта класса Ьаве1 Создание объекта класса Ьаве2 Создание объекта класса йегзчей уничтожение объекта класса йег1чей Уничтожение объекта клааса Ьаве2 Уничтожение объекта класса Ьаве1 Часть П. Язык С++ Как видим, и в этом случае конструкторы вызываются в иерархическом порядке, слева направо, как указано н списке наследования класса йекьчей. Деструкторы вызываются в обрапюм порядке, справа палено. Допустим, что имя Ьаяеэ указано в списке наследования класса йетдчей перед именем Ьвяе1.

й с1аня йехьчей: риЬ11с Ьаяе2, риЫЬс Ьаяе1 ( тогда результаты работы программы ныглядсли бы так. Создание объекта класса Ьаяе2 Создание объекта класса Ьаяе1 Создание объекта класса йегьчей Уничтожение объекта класса йесьчей Уничтожение объекта класса Ьяяе) Уничтожение объекта класса Ьаяе2 Передача параметров конструктору базового класса До сих пор мы рассматривали конструкторы, не имеющие аргументов. Если конструктор произвсаного класса должен получать несколько параметров, следует просто использовать сщ) щартную синтаксическую форму консзруктора с параметрами (см. главу 12). Однако возникает вопрос, каким образом перелаются аргументы конструктору базового класса? Для этого применнется расширенная форма объявления конструктора производного класса, которая позволяет передавать аргументы нескольким конструкторам одного или нескольких базовых классов.

Общая форма этой синтаксической когютрукции такова. конструктор производного-класса (список аргументов):Ьавелсписок аргументов), Ьале2(список аргументов), Ьаве//(список аргументов ) ( // Тело конструкпюра производного класса Здесь параметры Ьаве! — даве/У являются именами базовгях классов. Обратите внимание на то, что объявление конструктора производного класса отделяется двоеточием от спецификаций базовых классов, которые, в свою очередь, разделяются запятыми. Рассмотрим следующую программу. $1пс1ийе <1ояесеаю> ияьпя пагвеЯРЯсе Яей) с1аяя Ьаяе ( рхосессей: 1пс 1/ риЫЬс: Ьаяе(ьпе х) [ 1=х; соне « "Создание объекта класса Ьаяе1п"/ ) -Ьаяе(! ( сося « "Уничтожение объекта класса Ьаяе1п"/ ) ); с1аня йек1чей: риЬ11с Ьяяе ( ьпе З) риЫ).с: // Класс йек1чей использует переменную х; // переменная у передается базовому классу.

Характеристики

Тип файла
DJVU-файл
Размер
7,03 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6549
Авторов
на СтудИзбе
300
Средний доход
с одного платного файла
Обучение Подробнее