Читайте также: |
|
- до класу В.
В літературі (Б.Страуструп) це називається усуненням неоднозначністю.
Інший вид невизначеності з’являється, якщо ми створюємо похідний клас від двох базових класів, які, в свою чергу, є похідними одного класу. Це створює дерево успадковування в формі ромба. Така ситуація виникає в програмі 17.12
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<bios.h>
//---------------------------------------------------------
class A
{
public:
void func();
};
class B:public A
{ };
//---------------------------------------------
class C:public A
{ };
//-----------------------------------------------
class D:public B,public C
{};
//////////
int main()
{clrscr();
// ObjD.func(); помилковий виклик
bioskey(0);
return 0;
}
Програма 17.12
Класи В і С є похідними класу А, а клас D є похідним класів В і С. Труднощі виникають, коли об’єкт класу D намагається скористатися методом класу А. В програмі 17.12 об’єкт objD використовує метод func(). Однак класи В і С містять копії методу func(), успадковані від класу А. Компілятор на може вирішити, який метод використовувати, і повідомляє про помилку.
Існує багато варіацій цієї проблеми, тому ряд експертів радить уникати множинного успадковування.
2. ВКЛЮЧЕННЯ: КЛАСИ В КЛАСАХ |
Далі ми обговоримо включення, хоча воно й не має прямого стосунку до успадковування, механізми включення та успадковування є формами взаємовідносин між класами. Тому корисно буде порівняти їх. |
Якщо клас В є похідним від класу А, то ми кажемо, що клас В є частково класом А, оскільки клас В має всі характеристики класу А, а також свої власні. Тому часто успадковування називають взаємовідносинами узагальнення.
Включення називають взаємовідносинами типу «має»: бібліотека «має» книжки, або «частина цілого»: книжка є частиною бібліотеки.
В ООП включення з’являється, якщо один об’єкт є атрибутом іншого об’єкту. Розглянемо випадок, коли об’єкт класу А є атрибутом класу В:
Дата добавления: 2015-01-29; просмотров: 26 | Поможем написать вашу работу | Нарушение авторских прав |