Г. Шилтд - Самоучитель C++ (DJVU) (1114955), страница 80
Текст из файла (страница 80)
= О; з < 1О; 1++) поззза [1) = О; уоЫ аггау::вел(1пЬ ~п) 1пЬ Гог(1 = Оз з < 10з 1-н~) попа[1] = п[з ]З чо1<( аггау. "з яЬою() 11аа 1; ('огд = Оз з' < 10; за+) сонг « попа[1] « созз' « "зп"; аггау аггауз:орегагог+ (аггау оЬ2) ( гпг аггау Ьепрз Еог(1=От 1<10; 1++) гепр.папа[1] = пззпа[1] + оЬ2.попа[1] гегигп гегпр; аггау аггауз: орегаЬог- (аггауоЬ2) ( зп а гау гепр; гог(1=0; 1<10; зз-з-) Ьепр.попа [з ) = попа [1] — оЬ2 . пззпа [ з. ] ) геспз:гз гепр; 1пг аггауз: орегаЬог=- (аггау оь2) Самоучитель С++ 566 (пг кок(а=0' а<10; кч+) з г (пиля (г] .= оо2.пыая (1) ) ГЕКПГп 1; 1пг ~пауп() ( 1 аггау о1, о2, оЗ~ 1пк. 1(10] = (1, 2, 3, 4, 5, б, 7, 8, 9, 10 ); о1.яес (1); о2.яек (1); оЗ = о1 + о2; оЗ.я)~он() т ОЗ = о1 — О37 оЗ.зйоъ(); сонг « "о1 равно о2Ы"; « "о1 не равно о2~п"; Г(о1== г) е1яе сопШ 1~(о1==оЗ) е1яе сонг соек « "о1 равно оЗ~п"; « "о1 не равно оЗЫ"; ке(:пгп Об 5.
()1пс1ис)е <1ояггеатв> паунд паглеярасе ягс(; актау:: актау () .пс с1аяя аггау ( 1пг пкяая[10); риЫ1с: а гау() Р тоЗс( яег(1пк п(10] ); тоус1 яйся (); йг1епй аггау орекагог+(аггау оЫ, аг ау оЬ2); йг1епй аггау орегасог-(аггау оа1, аггау оЬ2); ~куевда 1пг орегасог==(аггау о)я1, аггау оЬ2)р Приложение В.
Ответы на вопросы и решения упражнений 567 Гог(з. = 0; т < 10; з.т-+) псппа [з.] = 0„' т о1с) аггау:: аег (1пп *п) зоп з ° Гог(1 = 0; т < 10; 1++) птппа [1] = тт[1] чо(с] аггаут: аЬотт () ( 1гт'с т; аког<] = О; т ( 10; 1-++) спит « ттппта[1] « соиЬ « "тп'*т аггау орегасог+ (аггауоЬ1, аггау оЬ2) [ пг агз-ау етпр; аког (з.=О; 1<101 1т-т) септр. птппа [1] = оЬ1.
пптпа [1] + оЬ2.пптпа [1] т ге пгп Гептрт аггау ОРегаЬог- (аггау оЬ1, аггау оЬ2) Ьпг агг.ау септрт Ког(1=01 1<10т 1~т-т) ~етпр.птппа (1] = оЬ1.птюпа [1] — оЬ2, птзтпа [1] гестзгп пезпрт 1гп орегаспг== (аггау ОЬ1, аггау оЬ2) 1пг з т Гог(з.=От з.<10т 1+-т-) 1г(оЬ1,птппа [1] [= оЬ2.птппа [з.]) гетигп 0; гетигп 1; тпт пта1п () ( аггау о1, о2, оЗт 558 (пс 1[10] = (1с 2, 3, 4, 5с бю 7, 8, З~ 10 )и о1,иег.(1)' о2.
вес (1); оЗ =о1+о2; оЗ. апов(); 03 — о1 — оЗ; оЗ. и'пою(); 1Г [о1==о2) соус « "о1 равно о21п"; е1яе совс « "о1 не равно о21п"; 1г (о1==оЗ) соне « "о1 равно оЗ1п"; е1яе сов~ « "о1 не равно оЗ1п"; гегнгп 0; б. й[пе1иде <1оиг.геат> ыи[пц пагпеирасе игс[; е1аии аггау ( шс пити [101; риЫ1с; аггау ( ); уоЫ иеГ, (1пГ.п(10]) р чоЫ апов(); ввгау орегаГог++ (): Ыепс[ а свау орели~от в [аглау ьоЬ) аггау::аггау[) ( 1пс +от[1 = 0, < 10; 1 .
) и[1) = 0; чоЫ алатау: ."иеВ(1пЕ *и) ( 1п[. ].; йод.(1 = 0; 1 < 10; 1~-+) пыта[11 = п[11„. чоба аггау:: ирои () (пав 1; упражнений 569 Приложение В, Ответы на вопросы и решения Ког(1 = О; ( < !О; 1++) соцс « пнгля(1) « сонг « "~п"г Перегрузка унарного оператора с использованием функции-члена аггау агаву::орегасог++О ( 1пс (ог()=О; 1<10; )++) пыля(1)++, гсгигп *с)т1я; // Перегруяка унарного оператора // с использованием дружественной функции аггау орегасог-- (аггау йод 1гг( аког(1=0; 1<10; 1++) о)з.пцгля(1) --; геспгп оЬ; 1пс ~паап() ( аггау о1, о2, оЗ; (пс 1[10) = (1, 2, 3, 4, 5, б, 7, 8, 9, 10 ); о1. яел (1) г о2.яес(1); оЗ = ++о1; оЗ.япои() ) оЗ =--о1; оЗ.
я)тон (); гесцгп О; 7. Нет. Оператор присваивания может перегружаться только с использованием Функции-члена. Самоучитель С++ 570 Упражнения 1. Правильными являются инструкции А и С. 2. Когда открытые члены базового класса наследуются как открытые, они становятся открытыми членами производного класса.
Когда открытые члены базового класса наследуются как закрытые, они становятся закрытыми членами производного класса. 7.2 1. Когда защищенные члены базового класса наследуются как открытые, они становятся защищенными членами производного класса. Когда защищенные члены базового класса наследуются как закрытые, они становятся закрытыми членами производного класса. 2. Категория защищенности позволяет сохранить закрытость определенных членов базового класса, оставляя, тем не менее, возможность доступа к ним из производного класса.
3. Нет. 7.З 1. $1пс1пйе <ьовсвеав> Мьпс1ис)е <сясттпр> пвтпд патеврасе все; с1аяя пауЬаяе ( сЬап вся(801; рпЬ11с-' твуЬаве(сЬав *я) ( яппсру(япп, в); сЬап *с)еЬ() ( вепптп вся; с1аяя пуйетт тес): рпЬ11с жуЬаве ( ьп' 1еп; рпЬ11с: твудетз.чес((сЬав *в); пуЬаве(я) ( 1еп =- вет1еп(в); тпя ВеЬ1ЕП() ( тепппп 1еп; ) тоьс( вьем () ( соис « чее () « ' ~п '; Приложение В. Ответы на вопросы и решения упражнений 57( (и( гпа1п () ( гпусет1чес( оЬ ( "привет" ); оЬ.
зЬон(); соль « сЬ,цес1еп О « '~п'; леьплп О; 2. ()1пс1пбе <1сзпгеап» :я1пд пашеярасе з~ Базовьгй класс для .« Силей разных типов с1аяя чеЬ1с1е ( 1пь сшп~ ХЬее1з; 1пс тапсе; рпЫ1с: чеЬ1с1е (1пл и, 1пь л) пил~ нЬее1з = х; галде = л; с1аяя сап: рпЫ1с чеЬ1с1е ( 1пс раяяепделя; риЬ11с: сап ()лп р, 1пс и, 1пп л) ( чеЬ1сте (и, г) раяяепдегя = р; чоЫ зЬои ( ) ! зЬсич( ); соил « "Пассажироемкость: " « разяепсетз « ' ~п " с1аяя слпс)<: рпЫ1с чеЬ1с1е 1пс 1оаб11лпс; рпЬ11с: сгпс)<(1пс 1, 1пс ът, 1пс с): чеЬ1с1е (х, г) чоЫ зЬсич ( ) ( сопл « "Число колес: " « пьлп иЬее1я « '~п'; сопГ « "Грузсподъеьгнссть: " « гапае « '~п'; Приложение В.
Ответы на вопросы и решения упражнений 573 с1авв С: рпЫ)с А, риЫ(с В ( (пг рпЫьс: С()пг с, )пг Ь, )пг а): А(а), В(Ь) ( )г=сг Проверка усвоения материала главы 7 1. Гг1пс1псе <1оаТгеаи> св1пд папеорасе всг(Г с1ааа Ьп11Ж.пц ( ргосесСесб тпе г1оога; тп . госта; сопЬ1е гоогаце; с1авв Ьоиве: риЫ)с Ьи)!Жпа ( 1пг Ьег)гоопта; )пг ЬагЬгоота; риЬ11с: Ьоиае (ьпе Г, )пт г, г)оиЫе ГГ, )пт Ьг, (пГ Ьс)1) г)оогя = Г; гоогпа = г; Гестасе = Й; Ьег)гоопта - Ьг; Ьа)Ьгоогпа = Ьс1Н чо1г) вЬон() сонг « « Йоога « 1п « госта « ' Хп' г « Гоогаае « ''л' г « Ьедгоопта « '~п' г « ЬаГЬгоопга « '~п' г "этажеи: сонг « "комнат: "метраж: "спален: "ванн: сонг « сонг « сонг « 2.
Виртуальный базовый класс нужен тогда, когда производный класс наследует два (или более) класса, каждый из которых сам унаследовал один и тот же базовый класс. Без виртуального базового класса в последнем производном классе существовало бы две (или более) копии общего базового класса. Однако благодаря тому, что исходный базовый класс делается виртуальным, в последнем производном классе представлена только одна копия базового. о 74 Самоучитель с1аяя отегсе: рпЬ11с Ьп11атпд ( 1ПС рЬопея; 1пЬ ехс1пуиъяЬедя; роЬ11с: огггсе (1пь т, гпс т, с(опь1е тс, гпс р, 1пь ехс) т1оотя = т; тоста = т; тоське = Гс; рЬопея = р; ехсгпдпгяЬетя = ехь; ,то1Й 5Ьои() 1пс та1п() Ьоияе Ь оЬ(2, 12, 5000, б, 4); отвгсе о оЬ(4, 25, 12000, 30, 8) сопл « "жилой дом: 1п" р Л оЬ.
5Ьои( ); соль « "~пофис: 1п"; оЬ5Ьои()р теялтп 0; 2. Если базовый класс наследуется как открытый, открытые члены базового класса становятся открытыми членами производного класса, а закрытые члены базового класса остаются закрытыми. Если базовый класс наследуется как закрытый, все члены базового класса становятся закрытыми членами производного. 3. Члены, объявленные как защищенные (рго1ес1ей), являются закрытыми членами базового класса, но могут наследоваться (и к ним можно иметь доступ) любым производным классом. При наследовании со спейификатором доступа ргогес1ей все открытые и защищенные члены базового класса становятся защищенными членами производного класса.
4. Конструкторы вызываются в порядке наследования. Деструкторы — в обратном порядке. 5, фгпс1пое <1оят.геаш> лягпц пашеярасе яьс," соп « СОнь « соШ <с сопс « Сспя « "этажей: " « Г1оотя « '1п'; "комнат: " « гостя « 'Ы'; "метраж: " « йооСаде « ' ~п'; "телефонов: " « рЬопея « '~п'; "огнетушителей: " « ехсгпдпгяЬетя « '1п'; Приложение В. Ответы на вопросы и решения упражнений с1авв р1апес рвосессеб: с(оыЬ1е с(тесаное; 11 расстояние в милях от Солнца полный оборот в днях гпс теко1уе; рцЬ11с: р1апее (в(оаЬ1е с(, ьпе и) ( Жвсапсе = с(; веуо1ые = л; с1авв еапсЬ: рпЬ11с р1апес <(оцЬ1е ствсцтвевепсе; // окружность орбиты рнЬ1) с: еажсЬ (с1оцЬ1е а, тцв т) , "р1апее (с(, т) ( ствспытевепсе = 2 ' атввапсе * 3.1416; жо'Й вЬо ~() соцс « расстояние от солю4а: " « отвсапсе « '1п'; соне « "Полный оборот в днях: " « тежо1же « сопл « "Окружность орбиты: " « с1лсптвтевепсе « '~п', тпс паьп() еавсЬ оЬ (93000000, 365); тесивп 0; 6.
Для того чтобы программа стала верной, классы пюгогиед и говд иве должны наследовать базовый класс з~е3ис1е как виртуальный. Проверка усвоения материала в целом 1. Некоторые компиляторы не допускают использования инструкции яч1ся во встраиваемых функциях. Такие функции автоматически трактуются компилятором как "обычные" функции. 2. Оператор присваивания является единственным оператором, который не наследуется. Причину этого понять легко. Поскольку в производном классе появятся члены, которых нет в базовом, то при перегрузке оператора = относительно базового класса в базовом классе ничего не будет известно о членах, появившихся в производном классе, и поэтому невозможно правильно копировать эти новые члены.
Самоучитель ГЛАВА 8 Повторение пройденного 1. ()1пс1ыс(е <-' ояггевявь вягпд патеярасе яМ; с1аяя а1гяЬьр ( ргогесгео: 1п раяяедегя; с(опЫе сагдо! с1аяя а1гр1апе: рыЫ1с а1гяЫр ( сЬаг епд1пе; !1 р для винтового, 1 для реактивного боыЫе галде; рпЬ11с: а1гр1апе (Ьпв р, ооиЫе с, сьаг е, ЙоыЫе раяяедегя = р; сагдо = с; епдапе = е; гапде = ) чо1с яЬои ( ) ' с1аяя Ьа11оог.: рыЫ1с а1гяЬ1р ( сЬаг дая; // Ь для водорода, е для гелия ЙопЫе а1сгГыс(е; риЫ1с: Ьа11ооп (1пЬ р, ЙопЫе с, сЬаг д, аопЬ1е а) раяяедегя = р; сагдо = с; дая = д; а1г гас)е = а; чо1с) яЬох() чо1с) а1гр1апе:: яЬох() ( сопя « "Пассажировместимость: "' « раяяедегя « 'М'; совс « "Грузоподъемность: " « сагдо « сонг « "двигатель: )7 иложение В, Ответы на вопросы и решения упражнений 577 11(ещьпе=-'р') сопС « "Винтовой1п"; е1ве сонг « "Реактивиый1п"; сонь <с "Дальность: " « гапце « '1п' гэЫ Ьа11ооп:: виси() сонь « Пассажировместимость: " « равведегв « сопл « "Грузоподъемность: " « сагдо « '1п'; сон" « "Е(аполиитель: 1Й(дав=='Ь') соп' <с "Водород~о") е1ве сонг « "Гелий1п"; сонс « "Потолок: " « а1Ь1ьнс(е « '1п'; 1пг..
ла ьп Ьа11ооп Ь (2, 500.0, 'Ь', 12000.0); аугр1апе Ь727 (100, 40000,0, '7'', 40000.0); Ь. в)тон(); сонг « '1п'; Ь727.вЬои()) ге(игп 0; 2. Спсцификатор доступа рго(ес(ей оставляет члены базового класса закрытыми, по при этом позволяет получить к ним доступ из любого производного класса. 3. Выводимый на экран результат работы программы иллюстрирует очередность вызова конструкторов и деструкторов.