
08 наследование 2
.pdf
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();