Программирование >>  Расширенная версия языка c++ 

1 ... 72 73 74 [ 75 ] 76 77 78 ... 227


/* Здесь клас ved3 наслеет как класс derivedl, так и класс derived2 . Однако в классе derived3 создается только одна копия

класса base

class derived3: public derivedl, public derived2 { public:

in uct 0 { return i * j * k; }

); .

int mainO

derivedS ob;

Здесь нет неоднозначности, поскольку -

представлена только одна копия класса base , , ..ся . ob.i - 10; . - . : .:. i . :

ob.j = Ъ; f . . ) i-.

ob.k =5; v. .

cout равен

return 0;

Если бы классы derivedl ved2 наследовали класс base не как виртуальный, тогда инструкция

ob.i - 10;

вызывала бы неоднозначность и пр иляции возникла бы ошибка. (См. представленное ниже упражнение 1.)

2. Важно понимать, что даже если базовый класс наследуется одным как виртуальный, то копия этого базового класса все равно существует внутри

class base (

public: , J

int i;

Наследование класса base как виртуального

class derivedl: virtual public base {

public: : ;

)t - . , ... ,

Здесь класс base тоже наслеется как виртуальный . ....

class derived2: virtual public base {

public:

int k;




В программе из примера 1 удалите ключевое слово virtual и попытайтесь откомпилировать программу. Обратите внимание на виды ошибок.

2. Объясните, зачем может понадобиться виртуальный базовый класс.

Проверка усвоении мотериола гловы


Теперь вам необходимо выполнить следующие упражнения и ответить на вопросы:

1. Создайте исходнхй базовхй класс building для хранения числа этажей и комнат в здании, а также общую площадь комнат. Создайте производный класс house, который наследует класс building и хранит число ванных комнат и число спален. Кроме этого создайте производный класс office, который наследует класс building и хранит число огнетушителей и телефонов. (Замечание. Ваше решение может отличаться от приведенного в конце книги. Однако, если функционально оно такое же, считайте его правильным.)

2. Когда базовый класс наследуется производным классом как открытый, что происходит с его открытыми членами? Что происходит с его закрытыми членами? Когда базовый класс наследуется производным классом как закрытый, что происходит с его закрытыми и открытыми членами?

3. Объясните, что означает ключевое слово protected. (Рассмотрите два случая: когда оно используется для задания элементов класса и когда оно используется в качестве спецификатора доступа.) . . ,

4. При наследовании одного класса другим, когда вызываются конструкторы классов? Когда вызываются их деструкторы?

производного. Например, по отношению ьщущей программе этот фрагмент совершенно правилен:

derivedl ob; ob.i = 100;

Отличие между обычным и виртуальным базовыми классами проявляется только тогда, когда объект наследует базовый класс более одного раза. Если используются виртуальные базовые классы, то в каждом конкретном объекте присутствует копия только одного из них. В противном случае (при обгчном

наследовании) там было бы несколько копий.



Глава 7. Наследование 253

5. Дан следующий фрагмент программы, впишите детали, как указано в комментариях:

#include <iostreain> i .- - .. -

using namespace std; ч. - tl- -

class planet {

protected:

double distance; расстояние в милях от Солнца . . .-, int revolve; полный оборот Б днях

public:

planet (doubled, int г) { distance = d; revolve = r; }

class earth: public planet { ,

double circumference; окружность орбиты public:

/* Создайте конструктор earth (double d, in) . Он должен передавать классу planet OHiiMe и число оборотов,

а также рассчитывать окружность орбиты окружность = ir * 3.1416.) V :-..

/* Создайте функцию showO для вывода информации на экран */

int main () . : -

{ с -

earth

ob.show() ;

return 0;

6. Исправьте следующую программу:

/* Вариация иерархии классов из прера с классом vehicle. В программе имеется .ч-,.! . Найдите ее азка: попытайтесь довести компиляции и изучите сообщения ш:бках */ ttinclude <iostreain>

using namespace std;

Базовый класс для автомобилей разных типов Class vehicle { int

int range;

public: - . ui:.

num wheels = w; range = r; .c- i



1 ... 72 73 74 [ 75 ] 76 77 78 ... 227

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика