Для студентов МПУ по предмету ПрограммированиеТретья лабаТретья лаба 2013-09-14СтудИзба

Лабораторная работа: Третья лаба

Описание

Описание файла отсутствует

Характеристики лабораторной работы

Учебное заведение
Семестр
Просмотров
193
Скачиваний
16
Размер
1,39 Mb

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

progr-laba3_p388

Распознанный текст из изображения:

Вслелуюш мпр р сбь кт урш мою тбмтьн юль

эа» тэк, как если бы о был фуню(п й.

с1 3 Р .с!ею

(З.Ш(с

1Ш ор Ю (П1а е )М,

1пт оре шо (псм юг. (пт л),

О

р з с1азз вурш.

еургп ( прпвеш,а)

Ое зое бу цн

Ор с1аа .оре зтю(нсьа эю,1ш е),

йраничм(м) иа переуруаиу операуорое

Нные перечнслены юткнм аграннченнп

рьш»у:к

и помнить прп и регрузпе опервт роэ.

М мн пер грум т «люо е ныраюрм, к м ры у

ш твуют в Ст . Н люя гтерегру:кать оп р р д

° Н*завпснм е. л «о\орм» нп определен

операюры пппчнпяют л «шплартпым пр ннл м пр рн

т т (порялок нх выа ын нпя а ашрам нвх с хр «л

ет я)

В функции операторов, определепнме дл» классов

наслелуютс» плзссамн-и понквмп, кроме функцпн опе

р тора прнсвапванпя.

° Функцнп для квжд г оп р шра долзшм быть о»реле

лены отдельно, в тон числ для операторов тына

= и нм «ол бных

Знашнпя гмраметрсл ла унолчамвю не могут »сполз

Наследование

н юмдоес ее — уггобпо ср д тв Сзт, «озаоляюш е ьмем ть пгр и ыв впл функц й Ланньш пз од»от л «з в лругой Нз ледонанн н .шег переходить от ~ с, блздаюшпх бшпмп свой эмн, к псе более и Мю п лнзнров д стаююоопределнть класс

р и э д» ю лруг * (6 овогм класса, объевпть н препеяпть э нем новые члены, и он, помимо новых, унес. л дует все члены базового «л сс Нспплюоэамне прон одэых «лаосов позволяет стропть целые пераркнп ла сов

Дилемма прмршйп(оуо ооесиечмап

и пред мгюннх главы шеннш бмл п сгр с«юм с Ч бы з ююль,, пе анп . детали рэклмш«,» ° »р." з оц) ню 6»б. н т чвыэф йл, ад рм*шнй П га«м нд, без псх л« вЂ” т он функ«ай, ~р р ммню юш всего поп л зу т «лаосы нпппн, пред л нные н ггабй эппме не нм . пм. Но что ать, ." лп нужно моднфпцмр ать такой клшс)

'(тебы рею ш лгу «робл му, мы»»о о«1 й гневе(от»ласс, гю у ы ягзт, запою Вол уд чнмм рмненнем ваш(ется озп нн новом кл оса При так юдхсдедсстат чно грос бъявнп в к ч е члемав л «а сбьект кл оса

progr-laba3_p390

Распознанный текст из изображения:

юм случа щзываемл б ) Пр, л т ~л»о

пслноправвымм членами ар водны о ил. «а.

СОВ((ВНВВ ПРОКЗВО((ВО(В Класса

Окончамшьнаи щрснл «ласса Нулт г, лр«ведемнв» в р даа ле «Обобщание квасов Муб(г глав» «Перегрузка опсръто рова. подл»ржнваег несколько полезных функннб н пер» инб, леречнсленных в табл 2б

фте и ю Ош,п лающую выл лнит л траки

шаргнащ устройства а ад

со л мие Орощводного «ласс» путем ишлслщщик делах Орест»И прощнуру подавления этих функций, гшме если пет д стус« к тексту фующиб баэовзго «ласса.

Фрицев мыапаратор Оиащхщ

Сетрг

В р мает ух. ль »астр ку

«аннык, «эмчнеаюшу а

нул! гер нн тором

В ераша т длину сц кн д ых

Копирует в строку д аиых

солсрмнм е пар»и тр типа гьа .

Л и ыва т д ржнмое

парам тра типа сг ° кущую

пр «у данных

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

друг эз другом. По крайней мере,

олив нз строк долина ннсть пш

Ну51г. Друга« можщ иметь тил

Нузт илн сает

тощ!а

!

с оу

Р1ы

К пирует строки д гных

излруг гашыиктак»» ануэтг

Класс танце» длерэш» н с«ольхон л им«нов руиз

юров. С крапин в фуикни и д Маем ш л

д нных н стэнд р упр й

К ыщ ИЫС!азэ, прощаодный ат б э э»го пласса эаыС!аав, бъявлистся следующим Образом

:!з. з НеъС)еээ р»Ытс 5 е»С1ащ

. о *еы паъ

Гэкщ кшявление пршюлят к нтму, чт нл с и с1»аз,

О их д»нных и фен«пни, солермамзхсл а »бава.

, с»них, автоиатическм сопержнт данаыс ° фумкнин б,«кл са ЭаэеС)азэ. Программ« г может измен» ь

ли л«лть их» юга твин сщи и ногршггштлми, юлыул лла вимо »перез рм д уп к членам объекта

( ) или (-ъ).

В данком «омтепст» ключевое слово р»Ы! вела»тел спеиификатором д»ступа и апрецелкст механизм дгюгупа к членам базового юы са со стороим пронзводшио. Кроме ключзеопз слова роы1с в Описании пестуна можно испельювать ключевме слова рычаге и р о!естес (см. тщжэ анпанне этих слов в главе е Ключевые слова» ), од»»на варищг, прим:деинмб первым (рОЫш), «ел»ется наиболее Ор лп чтательммм.

~й-' '

эииилгбщ Прмда чем лспвъаа ь щиъ ы мс е мание

с,о аык ио машэъо амин .ч ше с м»мое

о дао

progr-laba3_p392

Распознанный текст из изображения:

Приз дсм орам р кл ггг(051, пр а «нппосбаюе

ю илах» ауз1г.

(РА)1сг

о(6 Ыр Ы оЫ),

ою юср Ы а(6).

)

Как «бь гь лл( опредюенип обык«!». Эгп пыл!ты ни юг л сгуп ю а е! чл ианбюю»окласю, ыюк кфункее» р 1 нег «1 щюгранмм с юпм к ч ж г .«л ду гю

браг

«1»с!нм гау!ээсг, ю

НУ1051Г ЭГ 1, вЫ2, эггз.

и 1 сору (' Ввэдюп опе а '),

зм2,Р1ьз( . ).

э( З.очер»1().

*1гЗ, 1е 1().

эю2.сэру('Вез« сгр ьа ),

ЭЫ2,Р)Ю (ЬГГЗ ВЕ1Р1 ())

ы 2 1оп(),

ОДРЕЛ ЛснисфУНКПИ0-ЧЮЮ ПР Юзы)ЮГ ЮЕЕППГ!051

моею быль вмю ание лвуг я п юбз н аз е, «вк быб

ие опреююнве функеы'г. гюв кью В рюн глуч«4

»Рм быю пюфункшгнвнупе бы пг г лв« . «»В

л !гор»агро»ьаю юло фун«пкн з и г г ыюв )йг еб

Ром с»учао, крп ежввлпен функции вне знаменуя юе(

пг, перез юмнем фуюен л бь ° 1

свау алв г ия» ( !

пс1ыэ асюо ь>

«1»с1 м "ву!пп1г.Ь

ыбейв ау1 згг,ь в«пюэег в себе байя ауэг

ы пу!Мггг а па! (югб)

р гг ( ьь, 0 гргг()).

1« »1105С 1ар 1 (Чаю)

Г Г[2Ы).

0 э (ЬФ).

.оу (ь г)

ем гбэмеого к«скоп и,ы, в»реющим »файле муы.срр н имеют префвкс аущгы. иваре\ Р, грюслегпгс ф)егдцвн «о»провею», арне»в»воз в разделе Обобщены юес«мубы глапм парссруаю опере»ров, вмглплас гакг

16 назыпсору(сьпг а)

ыl

таким брюо», юес пу(051 г юылержназ 1яю вила фупкггий фувкдии базовою «лвсса нуы г н фуикцин самого л. ма пу!051 . Префикс, нспользуеммй в определемии, чгнепы в ювисимссги ог гого, гле эгн функции обьеые«ы и опргл леды' и бюоюм млн щ и в дном классе. П г лнсд нвсгрукцнеб в пор.лел мнн фупкмин ьаыю 1 р П оы) «ример 50 я лаем» выю» функции ьгщ «ани«гьзггггюьюбле л ряп йгпемиа«ееае п сонме авва «с« фуакцн б-члеюн «ю с»у1001г,

му брзщенн Я ыполиюгююкк бычг бфуаки» меер пуржгг.

С гуацня с мсиьльвоаапвен пр, днам класюв эна гг льгю усзекнасч а, юлн в мигни л а с юебк

progr-laba3_p394

Распознанный текст из изображения:

янно юнененнс авм« плн и «ольки» фуюа«В бзюв г

«вессс.

с)з з »5105тг Рою!с »551

(Рею!с '

юю 1 Рщ(ющ),

О16 ссср т(ч 16),

аю С РУЩВЕ З).

Щ ЕСЕ С6ЬСЕЛ Е РУ «П Ю"Креза Я

),

РИ ну1ащ сару (сьэг з)

(Ковос ЕЮЕ«ЕЗЕЧ Е ОУ СЦ «СнрсснгЮ

Е рюулю гщ ющ д лсння фующнп сору э щмнзвол.

но«кею спмучн двефункщю.рэзлпч «сноп н л-

«я ммн действня«, но пнем и од«па«овмс нненв одне,

опредсммнэя в «ль пг(051, н друия, онределенмы в

«ль с йу51 ОЩ знн и гу бзпь вмзвзям ю фуякш й-

ю мое клесс Ну)051 . Н м ерьлля вьмовв перво» ч ль

ноб верен» фунм!н Рг (нз'бюа»но «лесов) мм лолм.

ни»спольэовмь чмрм р ум нммп бл стн дсйсп«(

то стымэмющэтуфункциюкзкцу«т, сару. Впре ив.

пом сдучю бул г к«змею д фу»к«»я нт!обт юрг

ю16 НУ105! ' терм ( юе)

сЬэг Пс1(266),

Осте ( Юг),

ПУР(г с РУ (Ь 1).

Ще э в Ррмс «ощ бзюее о юэссв

Е «слом, к глз к ппнлятор трмиет Он«функнн», оц

щ деляп 6 п. »рюле юог нмен» лелумцсм

ряд

,К П Р ПРРР Р , Ля 4ЪЯВЛ .. Ю

п енк юутр» л»е тв«ц лн ш«ю бьавл н пть. эмбнрют я зсн ленною кл с .

2 Компилятор щ э р ет объпвл нпя бззовои! ялюсз.

Если б эовмй «лэ том ввюемя промэводнмм, ю пров рк* выв лняемя лля его Мзового «л ссэ. Кэк тольк бывл «не найдемо веско,тнбобэзомю «лэс.

сс, вмб«рм:тся чл п зюга класа!.

5 Если ям» н«объявлено нн э одном нз «лэссов. «Рмаглятрпр юря т, н объявмпм л«функммгл бэльнай.

юн(щчдние 5 гч ммннз«с, ча щппвп кс т пв ер ппмсзюем«5 гэерэ тмепмееемктмюмкм пснр« ОН рючб ппмюю ю з ° с Псе»6

ИВОВ()ХВВ КВЕ(ЩДВВВНВВ

К добн 6 овми«л н,коюрме» гутнмет аюмюбмюннмс бюовмс кдм ы, про»звозн! «лзссм твкмс но) ннсгь сгмн «рсню лгьм «л см

для врянсрэ сбьзвн«эсс Нуг т)05! п(юлнмлям» т

с «т(Щ!

з! с! с" гм

с1.эт «гг п)оэ!. 'Ргь йу)05

! ! Ртзме.

рею(с

мщ Р1 г(юю К срт(' ' ), )

щ етсьм(! ! с. !пт

о!О Э 11сп1(! ! Щс),

«тщц!«пгщ, «ь«юнлю югл л т ль нэс

дб ..ю . гергпнпв. т!. мбз г кл

progr-laba3_p396

Распознанный текст из изображения:

юас(оба "агат!.а'

с1 м Нуйм1; р«Ы1с аует

слюовюямх ат «ласс Ну1611, ал и лю втвлмх-члсн л

б лм дс«нтм функ«ай'и в, увел .1» нмх ш «л

сз «уатт.

эюурйвкаю, лув т!югг. «у!01\ «нух( . д а «Р: Р

хню «лево», еем нну н рнс. (.

Рв.( и ри ми мд «ОО«му!Охт муег

внмклмммкле ану! ч!Охт, ам(. »«хе!им зиад

° иеувпксутекие.какр лпилмр вил иа рсюхм ми

гв(м ав!((сзн.

Вммзеа сменив зввч«темно Ье«ла емх л рарх«Я

ЯСЗДЗННЗ ЯНЗССЗ 6СЗ НЗСЛСНСЗЗННЯ

О(.",тф Иеаю ловили насюдозанич не яаляесса сепитмвяма м т д м емг(миног рюн н п лу пр ср ю

о«б чм елня. Бале и Уа, в и к трнх случзяк юот

м.е мм. П грим, т м ис ме-

ебю«смдав «»ям юю а рюпь б «репи

ро р"чином.

1(реля . ° (нм, прерамю атно и д тула«ко« дини

фун ннй-чя н в «лес» кухт(, з: «сключенне»

4 . в л, ( «лаеаефайлеюпл акое,ноемунсеб-

лн о сох«ать клас ну!Обе, аблая иаИ. я мимо св ° х,з. «нвтмазиетяма«л ссвн„хт К к витьуек й . з«б а л релнсмоз«ия оек функ«МИ масса яу«1 н бе нел давзиялу

сумки вз еюсабао риаеви враблеаи «властев создаем вием, предевюавюего аз себя мамочку в~круг бьекю класю иубс, в ааистююее еисю «ввоза» фувюаичлв ов иовам «люса емхаааз фУююлй-чмве класса нгбгг.

лу!(г з1

а и!с

у*' Оу» а ласса

° (а ! р с( юф,

с(6 го И а(6!.

сь О ет ( ае! Мт ( ю т а тат ((,!

1 ! атю !6! т ( 1 хг" ате!.(

о(6 а Ру(см з!( ет - "аН

16 Р1 а(аьа ак ет Р( те(, !

И

К «спасите«и вези меюла очнаепся ю, что кюзлмй вмУоа Фую(юю.чю(та в(мю тотзсю пулю три!оетр акую» е змее соотоеиюувм(ей фуип(вв еен» «ласса ИФггг ув «им браза«, креи аюламрочвслеюве функ«вй, доли«и бип се~я» всо фуаамва, трзнслврувюле запои функ-

progr-laba3_p398

Распознанный текст из изображения:

пвб ыырэюр», вызов фупк»гя прес»ран»ии» в вызов

и: Яюпр»УОР э лВгсэ Муз!

Срзвюпг вю бъявюнв клюс с обьявленне» класса

МУ1031, ПРНВЮ П Н В ОРЯМЕР. 33

° !" 1» ВУ(

с!аэ* ку!озгг оэы!с нФ(

Р Ы!с

1ЕЫРЦ Осу,

!л е (Р П Оглу.

Обе каноэ, объэвленн»е люль рвзвачныни способ нн, с дерпат Одне н ю гке члены. н работа с ван» булат выл л»пьсааб выпю даян»в .Тапке чев»два,чг и: еле»нее ебьявлевие какое му!Мг «анною про»с, поняг.

В(» В»»ГЭВТВЮ.

Мпаню вовгыатмз югюю юылб клесс вю 060»Очку сбююа «ласса Мупг п»в ванн» а»се»он. Дю ахаю юною лезгор»«о сбья алены я функ не» члс»ов гласе» куб! г но».

» яс»иьювагь нх выюв через сбмкг пао «ласса, во ияы»ябса чл но» мазы» Власов. В эюм сзучю сбьа»»- яг «ласса буде п»чнг лы» к РОче, юн в прю»рс 42.

Ы ИУ(331

(

Р" Ы ! с

Куаг ЧГ .

уугюме ое е ьу ке

ю» 1 рв» УЮ.

Ыс гры( !а(;

ОЛнвко функпин клнсс» кую вн ыркд гс» выэыюгь к к

фу!па»н «бъеки 1, и о»ытсюу ывм фрэпынг иро.

г( »ны буд» вюлялсгь г к.

НУ!031! 1031

П, .

103(Г. Ьг«з» ПЭ Е Г' '1.

За»ел н. что пря юибхолнносгв эд ння класса. п добыв «л су пуго»103! и прнмерэ 41, «роп лура выюва фунапня . Руып Юл у вопия! я. Кр не»»п,сбьып эг л лл нб ъып»елене крею!О »ля р ог сыс, »!вел ор «ылыт 'бэ»пас о н юээю»аоы» ю ту-

Набпбдобаммб и обблпчма абмемта

П р» м «ы.ююэс О р а бъ гав рненюр вэыюг пр ц э. М(»земна..г лу г пр» ягь е сюуан»н, могда ОР Н ЫН ! Р Ы Ь ( Сук»И едуч н! б о»но кл ю Б. Опара» пювку» гракпвыу юслю в»еы. Ио кн ока а\ъ, 1 класс Иу!%(г являегся рюн залп сп,» клэсю «узы, поз»ну к вену додав» юыпэ»фун»гнн Т пенсы Об э зосппп э троюни.

Прн прв» веюю ау гр ю неюда одом клесс ас» пзусу оуь кг друпв» клас а напрнмер. м:кяо о»лять «васс Р, оюрзиы»В ° с»мьк Объ г т в друн го классе

г-1 зее,

Мл»нп случюг лъ Ре !»ВВО »ын Оъ «ласса »131.. Уак кю еег совер»сан лру. Рыли н» пы д вня эпы двух «л с (Ре зс в НУ!031 УаЧСВ«ЛН .ОД К «Н Ч РЫХСЛУЧНЫСЛЕЛВТЬВ». б р у п го»еюд д «юзею» «адеввиногоуляо.

progr-laba3_p400

Распознанный текст из изображения:

В)фйб РР)бтУЭЭ) Рб)ЫО, РО)ййуф й фрйбйьфйд

С+симы)зри»к»э »скиф««вюрвд ул. к юимкяыСа. О Я)С, Р ЫЭСЕ Р *) С)Ы

зсы кл нклы °,, илныхс н . ю.) .

Л)буэюпюы )со~у Нуммс«с О ор-

еии 33-- «1с!ыи РС Ы

1 Ы «У)ам. Р Ы С «ус)

ны

С)РЫ С)

ОЫ»)О С) сю,

).

Эз снлвылвлвеппи) ню диымб и с «Овса«181,

Нузф,»Ю»» ОЫ» Ы

»»Ляпы» ЧЛЕНОМН «ЛОС НУ1081 ОДН НО ПОапЮ ПР-

ЯИОЫЬ фУЫакы ам1ЬУ, «Ын помп) Н В Д Н «РЬМ

строки сесе, нрвылы к ынвб, ык ю«трою юс бъЛеююу лезиным о лиф»к»с р Д ЧУ» о 1 Ы

ласту» к ней ым фу» Э)й-ю мю ю с й)8) м о:«си

)О НУ!081 ЮЭРЫУ)

1

Р)) Ы 1 Ы, Р ),' ЫО б Е,

).

Ор р «

бй)

О Ифк»Ы»ВОН Л ЗУН»р С )Ы. При ык ЛИ о. ЫННК )Ми З ПОЫПС» ЛОЫУИНММ Н т ЛЬК Лв» ФУНК. ° Нй- И В ЮЫ»О К)ДС, Н В ЛЛ» фУНЫый.Ч Н В «ЬМСВ Н)юэс

3 н «морю кучюк ОЬям)юю Лхиимх-члпмв МЮ

Ю»фк РЬР 1 С)»6»«еяэ) О И бз ЛНМЫМ Те

обюол мм бю ю з, юу 6 ЛРИ ю жюваеюпюных-чл изб. ююкл с вфункиях и)мю»ОЮ» ис е.

1)лс к »при»едем« ирюм)мм мюомюнть ° р юнзыр ", 1 ОЫ, Ру» Р!ю сбюоюн я«ый д Гуо к з»ммииимля тюбемезьвюм мни«он 6 фУ. »Ы, Лимы)Ни Р ММН Л ЮЮИН Ки)

фу о й ы и»бы имбхомю н п ню со

йлэызэ ).

Пййэбйф йфз)333333 ВаССа

К н уме было спелым, ым»юй нэ» б импе». юию »ел» ы в иююнюь сбънвнзь б вий нлыс, з псаис со.

ю ььзь помп «пи» любое ыыи» юио «)и»э»о»ли*пээо.. ы)в Эю юзссы, наны »черен, м гу» фею фи»мы» ляк хрупы клем«в,теизм»бровем, ч) рх» кеелерюок»

в мсс Ыыь сколь уп дю выюким н рю» выкипи. ынр л зн бвымый к с ыы хр пенн» ннф рм пвв о ««ых. к м рмй с дерюы ыилуэннн д н ып кюв*» Н Ь Рэ, ИЭЛЛЗ ЛЫ О . ЮД М СЗ ЮЮИНЯ

прога3-теор_часть

Наследование

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

Лучшим вариантом по объему требуемой работы является наследование. Это означает создание нового класса, производного (derived) от класса MyStr (последний в этом случае называется базовым). При наследовании все члены базового класса (в нашем случае MyStr) становятся полноправными членами производного класса.

СОЗДАНИЕ ПРОИЗВОДНОГО КЛАССА

Описание функций и операторов

Getptr - возвращает указатель на строку данных, заканчивающуюся нуль-терминатором

Length - возвращает длину строки данных

Copy - копирует в строку данных содержимое параметра типа char*

Plus - дописывает содержимое параметра типа char* в текущую строку данных

+ - записывает две строки в одну друг за другом. По крайней мере, одна из строк должна иметь тип MyStr. Другая может иметь тип MyStr или char*

= копирует строки данных из другого объекта класса MyStr.

Класс также поддерживает несколько полезных конструкторов. Сохраним все эти функции и добавим еще две:

-- функцию output, позволяющую выполнять вывод строки данных на стандартное устройство;

-- функцию input, позволяющую выполнять ввод строки со стандартного устройства ввода.

Создание производного класса путем наследования делает простой процедуру добавления этих функций, даже если нет доступа к тексту функций базового класса.

ПРИМЕЧАНИЕ: в некоторых источниках базовый класс называют родительским классом или предком, а производный класс - дочерним или потомком.

Класс NewClass, производный от базового класса BaseClass, объясняется следующим образом:

class NewClass: public BaseClass

{

<объявления>

};

Такое объявление приводит к тому, что класс NewClass, помимо своих данных и функций, содержащихся в объявлениях, автомаически содержит все данные и функции базового класса BaseClass. Программист должет изменять и дополнять их в соответствии со своими потребностями, используя для этого операторы доступа к членам объекта (,) или (->).

В данном контексте ключевое слово public является спецификатором доступа и определяет механизм доступа к членам базового класса со стороны производного. Кроме ключевого слова public в описании доступа можно использовать ключевые слова private и protected, однако вариант, приведенный первым (public), является наиболее предпочтительным.

ВНИМАНИЕ! Прежде чем использовать какой-либо класс в качестве базового, он должен быть полностью определен. Чаще всего для этого достаточно включить в программу соответствующий файл заголовков с помощью дерективы include.

Приведем пример класса MyIOStr, производного от базового класса MyStr.

#include <mystr.h>

class MyStr: public MyStr

{ public:

void input(void);

void output(void);

};

Как только класс объявлен, его можно использовать для определения объектов. Эти объекты имеют доступ ко всем членам базового класса, а также к функциям input и output.

Как обычно, рекомендуется определение класса записать в отдельный файл заголовков, например myiostr.h. Фрагмент программы с этим классом может выглядеть следующим образом.

#include <myiostr.h>

MyIOStr str1, str2, str3;

str1.copy ("Vvedite stroky");

str2.plus(":");

str2.output();

str3.input();

str2.copy("Vvedrna stroka");

str2.plus (str3.getptr());

str2.output();

Определение функций-членов производного класса MyIOStr может быть выполнено двумя способами также, как обычное определение функций-членов класса. В первом случае при объявлении функции внутри объявления класса, компилятор встраивает тело функции в месте ее вызова. Во втором случае, при объявлении функции вне объявления класса, перед именем функции должно быть записано имя класса с двумя двоеточиями.

// определение новых функций класса MyIOStr

#include <stdio.h>

#include "myiostr.h"

// файл myiostr.h включает в себя файл mystr.h

void myStr::output(void)

{

printf("%s", getptr());

}

void MyIOStr::input(void)

{

char buf[256];

gets (buf);

copy (buf);

}

Здесь определены две функции нового класса. Обе они имеют префикс MyIOStr::. Основные функции унаследованы от базового класса MyStr, определены в файле mystr.cpp и имеют префикс MyStr::. Например, определение функции копирования, выглядит так:

void MyStr::copy(char *s)

{//...

}

Таким образом, класс MyIOStr поддерживает два вида функций: функции базового класса MyStr и функции самого класса MyIOStr. Префикс, используемый в определении, меняется в зависимости от того, где эти функции объявлены и определены: в базовом или производном классе.

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

class MyIOStr: public MyStr

{public:

void input(void);

void output(void);

void copy(char *s)

//новое объявление функции копирования

};

void MyIOStr::copy (char *s)

{ // новое определение функции копирования

}

В результате переопределения функции copy в производном классе получилось две функции, различные по исполняемым действиям. но имеющие одинаковые имена: одна, определенная в классе MyIOStr, и другая, определенная в классе MyStr. Обе они могут быть вызваны из функций-членов класса MyIOStr. Но теперь для вызова первоначальной версии функции copy (из базового класса) мы должны использовать оператор уточнения области действия (::), то есть вызывать эту функцию как MyStr::copy. В противном случае будет вызываться функция MyIOStr::copy.

void MyIOStr::input(void)

{

char buf[256];

gets (buf);

MyStr::copy (buf);

//вызов функции сopy базового класса

}

В целом, когда компилятор встречает имя функции, он определяет область определения этого имени в следующем порядке.

1. Если имя находится внутри определения функции-члена класса, компилятор проверяет, есть ли объявление этого имени внутри данного класса. если такое объявление есть, выбирается член данного класса.

2. Компилятор проверяет объявления базового класса. Если базовый класс тоже является производным, проверка выполняется для его базового класса. Как только объявление найдено в каком-либо базовом классе, выбирается член этого класса.

3. Если имя не объявлено ни в одном из классов, компилятор проверяет, не объявлена ли функция глобальной.

ПРИМЕЧАНИЕ: Если предполагается, что функция может быть переопределена для производного класса, ее следует объявить виртуальной.

ИЕРАРХИЯ НАСЛЕДОВАНИЯ

Подобно базовым классам, которые могут иметь свои базовые классы, производные классы также могут иметь свои производные классы.

Объявим класс MyFontIOStr производным от класса MyIOStr.

#include <mystr.h>

class MyFontIOStr: public MyIOStr

{

int ptsize;

public:

void clr(void) {copy("");}

void setchar (int c, int n);

void setfont(int size);

};

Новый класс MyFontIOStr наследует все члены классов MyIOStr и MyStr, так как каждое последовательное наследование добавляет или переписывает члены базового класса. Ни один из членов не исчезает, хотя права доступа могут иногда изменяться.

В классе MyFontIOStr появились новые члены, которых нет у базовых классов, - это переменная ptsize и три новых функции. Кроме того, он имеет три функции-члена, унаследованных от класса MyIOStr, плюс два данных-члена и более десятка функций-членов, унаследованных от класса MyStr.

Эти три класса, myFontIOStr, MyIOStr, MyStr, создают иерархию классов.

Исходный класс MyStr не является непосредственным базовым классом класса MyFontIOStr, самого младшего в этой иерархии. Но через наследование он передает свои члены этому классу так же, как родители передают свои гены внукам. Возможно создание значительно более сложных иерархий классов.

НАСЛЕДОВАНИЕ И ОБОЛОЧКА ОБЪЕКТА

Картинка-подпись
Хочешь зарабатывать на СтудИзбе больше 10к рублей в месяц? Научу бесплатно!
Начать зарабатывать

Комментарии

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