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

1 ... 69 70 71 [ 72 ] 73 74 75 ... 227


222 Самоучитель C+ +

инициализировать переменную passengers, а конструктор ск() - переменную loadlt.

#include <iostreaiu> , -.- \

using namespace std;

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

int num wheels;

int range;

public: 1 .

vehicle(int w, int r) , !

num wheels - w; range = r; -

T 1 л .ltd

t ......

void showvO , . ;.ui !

cou Число колес num wheels \n;

cout range

class car: public vehicle {

int passengers;

: public: . . , - . , , ,

..j. вставьте здесь конструктор car() . .,. , j--- , void ShowO

showv(};

cout passengers

class truck: public vehicle { .

int loadlimit;

public:

вставьте здесь конструктор void ShowO

showv();

cout Пробег loadlimit \n ; I . ,

int main (

car 4, 0) ;

truck t (30000, 12, 1200);



cout легковая ыашина: . ...у;,. ,!;?. vttM -С т

с. ShowO; ;<-№<г-,

cout Хпгрузовик: \п ; .

show (,); . , , .

return 0; .. -

Для конструкторов мг() и truck() объекты должны объявляться следующим образом: ..,/. ,... ... ..... и

ca engers, wheels, range); . . ,

truck ob(loadlimit, wheels, range};

7.4. Множественное наследование

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

Во-вторых, производный класс может прямо наследовать более одного базового класса. В такой ситуации созданию производного класса помогает комбинация двух или более базовых классов. Ниже исследуются результаты, к которым приводит наследование нескольких базовых классов.

Когда класс используется как базовый для производного торый, в свою очередь, является базовым для другого производного класса, конструкторы всех трех классов вызываются в порядке наследования. (Это положение является обобщением ранее исследованного принципа.) Деструкторы вызываются в обратном порядке. Таким образом, если класс В1 наследуется классов D1, a D1 - классом D2, то конструктор класса В1 вызывается первым, за ним конструктор класса D1, за которым, в свою очередь, конструктор класса D2. Деструкторы вызываются в обратном порядке.

Если производный класс напрямую наследует несколько базовых классов, используется такое расширенное объявление:

class яия прояЗ]зодног>о класса: сп доступа 1шябазового хлассз1,

СП доступа 11мя ба.эово1го класса2, . . . , СП доступа шля б&зового-кл&ссаЯ

it ... тало класса



224 . Самоучитель.C++

Здесь имя базового класса1... имя базового кдассаМ-тА&п& базовых классов, сп доступа- спецификатор доступа, который может быть разным у разных базовых классов. Когда наследуется несколько базовых классов, конструкторы выполняются слева направо в том порядке, который задан в

объявлении производного класса. Деструкторы выполняются в обратном

порядке.

Когда класс наследует несколько базовых классов, конструкторам которых необходимы аргументы, производный класс передает эти аргументы, используя расширенную форму объявления конструктора производного класса:

констр проязв кяасса. {список аср1) : имя базового класса! (спясокарг) ,

имя бааоаого класеа2 (сш1сох зрг}, . , имклассаЯ ( список арг)

комструхтсра производного класса .

Здесь ого кдасса1 .. огоклассаМ- имена базовых классов.

Если производный класс наследует иерархии сов, каждый производный класс должен передавать предшествующему в цепочке базовому классу все

необходимые аргументы.

I. В этом примере производный класс наследует класс, производный от другого класса. Обратите внимание, как аргументы передаются по цепочке от класса D2 к классу В1.

твенное наследование . i .

# include <iostream> .

using namespace std;

;г . - I !(*<:. f-i - I i; ,1

class Bl { .

int a; 1=

public:......... . , . , ..

Bl (int x) { a = x; } , . , , . .

in aO { return a; }

Прямое наследование вого класса clas Dl: public Bl {

int b; public:

DKint X, in Bl (y) передача переменной у классу Bl



1 ... 69 70 71 [ 72 ] 73 74 75 ... 227

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