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

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

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

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

Одна сс версия склеивает две строки (аналогично функции вехсее()). Другая версия сначала преобразует целое число в строку, а затем коикатеиирует полученные строки. Таким образом, благодаря перегрузке можно создать единый ицтерфейс, позволяющий коикатеиировать две строки, а также строку и целое число. Разумеется„одгю и то же имя можно использовать и для функции, совершенно ие связанных между собой, ио делать этого це следует. Например, именем в((кО можно назвать функцию, вычисляющую квадрат целого числа и извлекающую квадрамный «одень из числа с плавающей точкой. Однако эти операции прицципиалыю разные, поэтому их перегрузка пе имеет никакого смысла (это считается дурным тоном). Перегрузка нужна лишь для создания общего ицтерфейса для родствеииых, тесно связаицых между собой операций.

Перегрузка операторов Полиморфизм в языке С+в проявляется также в виде перегрузки операторов. Как известив, для ввода и вывода в языке С++ применяются операторы "»" и "«"'. Это стало возможным благодаря тому, что в запиовке <вовекеаы> эти операторы перегружены. Перегружеииые операторы имеют разный смысл для разных классов, сохраияя при этом свое первоначальное зцачеиие.

В языке С++ можно перегрузить почти все операторы. Вернемся, иапримср, к классу ееес)с, рассмотренному нами выше. В этом классе люжио перегрузить оператор "+*', заставив его складывать два объекта класса веко)с. При этом оператор "+" сохраняет свой первичный смысл. Поскольку механизм перегрузки операторов иамиого сложиее, чем перегрузка функций, отложим его обсуждение до главы ! 4. Наследование Как указывалось ранее, наследование является одной из основных характерцых черт обьектно-ориецтироваицого программирования, В языке С++ цаслсдоваиие выражается в том, что один класс может приобретать свойства другого класса в момент своего объявления. Наслсдоваиие позволяет создавать иерархии классов, уточняя их свойства от самых общих до более конкретных.

Процесс наследования начинается с определения базового класса (базе с)аы), свойства которого будут общими для всех его наследников. Базовый класс представляет собой описание иаиболес общего характера. Наследники базового класса пазываются производными классами (депча) с!аваев). Произволиый класс облалает всеми свойствами базового класса и своими специфическими особенностями. Продемонстрируем этот механизм иа примере, в котором описываются разные типы зданий. СцаЧала Обьяапястея КЛаСС )ЗО11г)3пя.

Оц СЛужИт ОСНОВОЙ дпя СОЗдаНИя дВуХ Прсизводиых классов. с1аае Ьц(1дьпд ( ъпс кооае; хпе Г1ооха; ъпс аква; ро)з13 с: чоьд вес хосте (Зпс гплп); ъпс пес коопв О; чогд вес г1оокв(ьпс пшп); ъпе яее Г1оохв О; Глава 11. Обзор языка С+ъ но1б вее аква(ьпг пизь)з з 1пв дес аква()) Для простоты все здания описываются лишь тремя свойствами: количеством комнат, количеством этажей и обшей площадью. Класс ьи11бвпд включает эти компонситы в своем объявлении. Фуикции-члены, имена которых начинаются с префикса вве, задают зиачеиия закрытых данных. Функции-члены, имена которых начинаются с префикса две, извлекают и возвращают эти значения.

Теперь применим это слишком общее описание злаиия лля объявления произволиых классов, описывающих более коикретиые виды сооружений. Вот как, например, выглядит класс Ьоивв. Класс Ьоиве является проиэволным от класса Ьи11б1пд с1авв Ьоиве : риЬ11с Ьи11()1пд 1пс Ьес)лоопа; Ьпс Ьаспв; риЬ1з.с." ноЫ вес Ьебкоозьв(ыпс пиза]; тпс дес Ьее)кооазв О ) ноьд вес Ьаспв(зпс пиза)з 1пг двг Ьатбвы з ); Обратите внимание иа то, как происходит иаслеловаиие свойств класса ьи11лт1пд. В общем случае производный класс объявляется следующим образол(.

| с1авв производный класс:епецификатор доступа базальт класс ( У/ тело нагого класса ) Здесь специ(рикатор доступа указывать иеобязательио, Этот параметр может принимать три значения: риь11е, ркхниее или дкоевсевлт. (полробиее их смьюл описан в главе 12.) Пока будем считать, что все производные классы используют открьпое наследование.

Ключевое слово риЬ11с означает, что все открытые члены базового класса стаиовятся открьпыми члецами производного класса. Следовательно, открытые члены класса Ьиь1бзпд становятся открытыми членами производного класса Ьоивв и доступны функциям-членам класса Ьаивв, как будто оии объявлены непосредственно виугри производного класса. Оливка функции-члены класса Ьоивв не имеют доступа в закрытым членам класса ьи11бвпд. Это очень важный момент. Несмотря иа то что класс Ьаиве является наследником класса Ьи11бзпд, ои имеет доступ лишь к открытым членам класса Ьи11Жпд.

Таким образом, наследование не позволяет нарушить прииципы инкапсуляции информации, положепцые е основу объектно-ориентированного программирования. Производныб класс имеет прямой доступ как к своим членам, твк и к открытым членам базового класса. Рассмотрим программу, демонстрирующую механизм наследования Оиа создает два класса, производных от класса Ьи1161пд: классы Ьаивв и веЬоо1. Втпстибв <ловекеам ивупд пгзьеврасв всг)з с1авв Ьи11б1пд ( 1пс кооазв; 1пс б1оотвз зпе агеа; Часть й. Язык С++ риЬ)з.с з чо1й ве» косея(зп» пиза) з )п» де» »оома()з чоЫ ве» »1оотв(»п» пипз) з зп» де»,К1аотя() з чобй ве» акеа(зп» пшп); зп» де» акеа(); )з // Класс Ьоияе является производным от класса Ъи11сзпд с1авв Ьоияе : риЬ11с Ьи11ббпд 1п» Ьейтоозпвз 1п» Ьа»Ьвз риЫ1сз чо16 ве» Ьес)топав(1п» пшп) з »п» де» Ьейтоопзя()з чоЫ ве» Ьа»Ьв(Ы» пшп)з зп» де» Ьа»Ья()з ) // Класс всЬоо1 такае является производным от класса Ьи1161пд с1авя вспоо1 : риЬ11с Ьи1Ы1пд 1п» с1аявтоопвз ю» оН1севз риЬЬбс з чоЫ ве» с1аввтооев(1п» пшп) з зп» де» с1аявкоовв() з чоЫ яе» оН»сея(зп» пшп)з 1п» де» обй1сев() з ) -.

чоЫ Ьи11обпдз:яе» топив(1п» пшп) ( косзпв = пшпз ) чоЫ Ьи»1о1пдззве» »1оокв(1п» пие) »1оотв = пшпз ) чоЫ Ьи»1оапдз:ве» атеа<зп» пизп) ( атеа = пшпз ) Зл» Ьи»1о1пдз зде». косея() ( те»итп топаз ) зп» Ьи»1озпдз:де» 11оотв() < ке»икп б1оотвз ) зп» Ьи11о1пдззде» атеа() те»икп атеа; Глава 11. Обзор языка С++ чоЫ Ьоиве: . вес Ьек)топав (1пт пса) ( Ьес) о = пиг; ) чозй Ьсияе:: вет ЬатЬв (1пт пса) оатЬв =- пита; ) тпт Ьопве::цет Ьес)тосте() < тетитп Ьейтоотв; ) зпт Ьоияе: пзет ЬатЬв() ( тетптп ЬатЬв; ) чо(с) всЬоо1::вес с1аввтсопв[1пт ппв) ( с1аявтооав = пиа; ) чо16 всЬсо1::вес отт1сев(1пт пып) отт1сев = пав; ) 1пт всЬос1::де» с1аввтооав[) тетитп с1аввтоопв; ) 1пт всЬоо1: пзет отт1сев[) тетитп отт1сев: ) Ьпс тазп() Ьопве Ь: всйоа1 в; Ь.вес топав(12); Ь.вес 11оотя(3); Ь.вес атеа[4500)( Ь.вес Ьедтоовв(5): Ь.вет ЬагЬя(3)[ сост « "в доме " « Ь.уев Ье([топав!) сост « " спален1п"; в,вет тоста(200); я.век с1аввтоовв[180); в.вес отт1сев(5); я.вес атеа(25000); Часть П.

Язык С++ ссцс « "В щколе " к< я.дел с1аяялоощя О; соне « ' классных комнат1п"; соцс « "Ее площадь равна " « я.дев алеа О летцгп 0; ) Результат работы этой программы приведен ниже. В доме 5 спален В щколе 180 классных комнат Ее площадь равна 25000 Как видим, основное преимущество механизма наслслования заключается в том. что можно сначала создать общую классификацию, а затем на се основе разработать уточняющие классы. Таким образом, каждый объект может точно представлять свои собственный подкласс. В ю(игах о языке С++ отношение наследования часто списывают с помощью терминов базовый класс и производный класс.

Однако наряду с ними часто упоминаются термины предок и наследник. Кроме того, можно встретить понятия суперкласс и подкласс. Кроме возможности создавать иерархическую классификацию, наследование обеспечивает поддержку динамического полиморфизма с помощью механизма виртуальных функций. (Детали изложены в главе!6.) Конструкторы и деструкторы Очень часто некоторая часть объекта перед его первым использованием должна быль инициализирована. Например, вернемся к описанию класса ясас)е.

Перед первым использованием объекта этого класса переменной соя следует присвоить число О. Для этого предназначена функция 1пхс(). Поскольку инициализация объектов— очень распространенное требование, в языке С++ предусмотрен особый механизм, позволяющий инициализировать объекты в момент их создания. Эта автоматическая инициализация осуществляется конструктором. Конан(рука(ор — это особая функция, являющаяся членом класса.

Ее имя должно совпадать с именем класса. Например„класс ясас)г можно модифицировать„предусмотрев в нем конструктор. // Класс ясасК с конструктором. с1аяя ясаск ( хпс яесх(818В)( 1пс соя; рц)з11с: ятясК()( // Конструктор чОЫ рыяп(1пс 1]; ьпс рорО; )( Обратите внимание на то, что в объявлении конструктора ясвс)еО не указан тип возвращаемого значения, поскольку в языке С++ конструкторы в принципе не могут возвращать значения, Код конструктора явас)тО может выглядеть так.

| // Конструктор класса агаси ясас)г::ясас)г О Глава 11. Обзор языка С++ | сов = 0: соцс « 'Стек инициализирован1п"! ) Учтите, что сообщение "стен инициаливнрован" просто иллвхтрирует работу конструктора. На практике конструкторы чаще всего ничего не вводят и не выводят: они просто выполняют различные виды инициализации. Конс!руктор автоматически вызывается в момент создания обьекта, т.е.

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

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

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

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