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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
moskitos80
57 / 57 / 9
Регистрация: 04.10.2011
Сообщений: 207
Завершенные тесты: 1
#1

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

27.07.2012, 15:46. Просмотров 884. Ответов 3
Метки нет (Все метки)

Всем привет. Объясните пожалуйста почему так происходит: есть некое древо иерархии классов в виде ромба:

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++
// 4.1.cpp: главный файл проекта. #include &lt;stdafx.h&gt; #include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;locale&gt; #include...

Множественное наследование в С++ - C++
Столкнулся с такой проблемой: class D{ ... public: ... void setD(); ... }; class Dd : public D{ ...

Множественное наследование - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; using namespace std; class ship { ...

Множественное наследование - C++
Так как у меня эта тема заняла долгое время для изучения ,выкладываю простой пример для освоения #include&lt;iostream&gt; using namespace...

Множественное наследование - C++
7 задание Сделайте пожалуйста, большое спасибо! :good:

Множественное наследование - C++
Как создать нового наследника из базового класса и наследника базового класса?

Множественное наследование - C++
Листинг: #include &lt;iostream&gt; using namespace std; class Person{private: string Fname,Sname,years;}; class Student{private:...

Множественное наследование - C++
Помогите пожалуйста написать программу.

Множественное наследование - C++
По этой схеме нужно сделать множественное наследование. Вот код:#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using...

Множественное наследование - C++
Имеется множественное наследование в виде треугольника. Если в обоих базовых классах имеются поля с одинаковым названием и смыслом, может...

Множественное наследование - C++
Есть два класса Human(fname, lname) и класс Employee c чисто виртуальными функц (зарплата и печать). На базе этих классов нужно создать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
7101 / 5278 / 267
Регистрация: 10.12.2010
Сообщений: 23,284
Записей в блоге: 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
57 / 57 / 9
Регистрация: 04.10.2011
Сообщений: 207
Завершенные тесты: 1
27.07.2012, 16:09  [ТС]     Множественное наследование в форме ромба #3
Цитата Сообщение от Avazart Посмотреть сообщение
Так какой из пространств А:: тот который из B или из С ?
А! Я понял: "В" и "С" (да и D) - тоже являются типом "А"!
Avazart
7101 / 5278 / 267
Регистрация: 10.12.2010
Сообщений: 23,284
Записей в блоге: 17
27.07.2012, 16:12     Множественное наследование в форме ромба #4
Думаю обьяснить можно как-то так
C++
1
2
B(A1)::func(); 
C(A2)::func();
Yandex
Объявления
27.07.2012, 16:12     Множественное наследование в форме ромба
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru