Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

08 наследование 2

.pdf
Скачиваний:
28
Добавлен:
27.03.2015
Размер:
349 Кб
Скачать

08 – 21

3.8. Множественное наследование Пример:

ИЕРАРХИЯ КЛАССОВ

Base1 Base2

Derived

08 – 22

class Base1 { protected:

int value; public:

Base1(int x) {value = x;}

int getData() {return value;}

};

08 – 23

class Base2 { protected:

char letter; public:

Base2(char c) {letter = c;}

char getData() {return letter;}

};

08 – 24

class Derived: public Base1, public Base2 {

friend ostream & operator<< (ostream &, Derived &);

private: float real;

public:

Derived(int, char, float); float getReal();

};

08 – 25

//Конструктор ПК с явным вызовом

//конструкторов двух БК

Derived::Derived(int i, char c,

float f): Base1(i), Base2(c)

{ real = f; }

float Derived::getReal() { return real; }

08 – 26

// Перегруженный оператор вывода в поток ПК

ostream & operator<<(ostream &output, Derived &d)

{

output << ”Целое: ” << d.value

<<endl << ”Символ:

<<d.letter << endl

<<Вещественное:

<<d.real << endl; return output;

}

08 – 27

int main()

{

// Создание ОБК, УБК, УПК и ОПК

Base1 b1(10), *base1Ptr; Base2 b2(’Z’), *base2Ptr; Derived d(7, ’A’, 3.5);

// Работает ФЭ БК1

cout << ”Объект b1 содержит целое

<< b1.getData() << endl;

08 – 28

// Работает ФЭ БК2

cout << ”Объект b2 содержит символ

<<b2.getData() << endl;

//Работает перегруженный оператор ПК

cout << endl << ”Объект d содержит: ” << endl << d << endl << endl;

08 – 29

//Печать ОПК через ФЭ БК1 и БК2

//Операция РОД (::) разрешает

//неопределенность функции getData()

cout << ”ДЭ ОПК доступны раздельно:

<<Целое:

<<d.Base1::getData() << endl

<<Символ:

<<d.Base2::getData() << endl

<<Вещественное:

<<d.getReal() << endl << endl;

08 – 30

cout << ”ОПК как ОБК:”;

// Доступ к ОПК через УБК Base1

base1Ptr = &d;

cout << endl << ”Результат вызова base1Ptr -> getData()

<< base1Ptr->getData();

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]