АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Лістинг 21.6 NormBase

Читайте также:
  1. Лістинг 21.5. Програма VirtDest

Class Parent

{ protected:

int basedata;

};

Class Child: public Parent

{ };

Class Child2: public Parent

{ };

Class Grandchild, public Child1, public Child2

{ public:

int getdata ()

{ return basedata; } //помилка: неоднозначність

};

Помилка компілятора виникла унаслідок того, що метод Getdata() з класу Grandchildспробував дістати доступ до basedataз класу parent. І що ж в цьому такого? Вся річ у тому, що кожен з породжених класів (Child1і Child2) успадковує свою копію базового класу parent. Ця копія називається підоб’єктом. Кожен з двох підоб'єктів містить власну копію даних базового класу, включаючи basedata. Потім, коли Grandchildпосилається на basedataдо якої з двох копій базового класу він дістає доступ? Ситуація неоднозначна, про що компілятор і повідомляє. Для усунення неоднозначності зробимо Child1і Child2спадкоємцями віртуального базового класу, як показано в прикладі Virtbase.
     

Лістинг 21.7 Virtbase. Віртуальні базові класи

Class Parent

{ protected:

int basedata;

};

Class Child: virtual public Parent //успадковує копію класу Parent

{ };

Class Child2: virtual public Parent //успадковує копію класу Parent

{ };

Class Grandchild, public Child2

{ public:

int getdata ()

{ return basedata; }

};


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)