Форум программистов, компьютерный форум CyberForum.ru

Множественное наследование в форме ромба - C++

Восстановить пароль Регистрация
 
moskitos80
 Аватар для moskitos80
39 / 39 / 0
Регистрация: 04.10.2011
Сообщений: 128
27.07.2012, 15:46     Множественное наследование в форме ромба #1
Всем привет. Объясните пожалуйста почему так происходит: есть некое древо иерархии классов в виде ромба:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////
class A 
{
   public:
      void func(void){} 
};
class B : public A 
{};
class C : public A 
{};
class D : public B, public C 
{};
////////////////////////////////////////////////////////////////
int main() 
{
   D objD;
   objD.A::func();  // Компилятор ругается: `A' is an ambiguous base of `D' 
   return 0;
}
Лафоре пишет, что классы В и С содержат в себе копии метода func(), унаследованные от класса А, и компилятор не может решить какой из методов использовать, но я же конкретно указал: objD.A::func() - чего ему ещё не хватает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2012, 15:46     Множественное наследование в форме ромба
Посмотрите здесь:

C++ Множественное наследование
Множественное наследование C++
Множественное наследование C++
Множественное наследование C++
Множественное наследование C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
27.07.2012, 16:00     Множественное наследование в форме ромба #2
Так какой из пространств А:: тот который из B или из С ?
Добавлено через 2 минуты

А вообще
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
////////////////////////////////////////////////////////////////
class A 
{
   public:
      void func(void){} 
};
class B : virtual public A 
{};
class C : virtual public A 
{};
class D : public B, public C 
{};
////////////////////////////////////////////////////////////////
int main() 
{
   D objD;
   objD.func();  
   return 0;
}
moskitos80
 Аватар для moskitos80
39 / 39 / 0
Регистрация: 04.10.2011
Сообщений: 128
27.07.2012, 16:09  [ТС]     Множественное наследование в форме ромба #3
Цитата Сообщение от Avazart Посмотреть сообщение
Так какой из пространств А:: тот который из B или из С ?
А! Я понял: "В" и "С" (да и D) - тоже являются типом "А"!
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
27.07.2012, 16:12     Множественное наследование в форме ромба #4
Думаю обьяснить можно как-то так
C++
1
2
B(A1)::func(); 
C(A2)::func();
Yandex
Объявления
27.07.2012, 16:12     Множественное наследование в форме ромба
Ответ Создать тему
Опции темы

Текущее время: 11:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru