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

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

Войти
Регистрация
Восстановить пароль
 
 
lanakramoleb
1 / 1 / 0
Регистрация: 18.09.2012
Сообщений: 32
#1

Концептуальная задача по ООП (виртуальное наследование в C++) - C++

06.12.2013, 15:06. Просмотров 1021. Ответов 20
Метки нет (Все метки)

Добрый день.

Есть базовый класс A.
От него наследуется B : public A.
От B виртуально наследуется C : public virtual B.
Далее D : public C. В C есть множество реализованных методов, которые нужны в D.

Однако конструктор для D нужно наследовать от B, потому-то C от B наследуется виртуально.
Метод method определён в классе B и переопределён для класса D.

В коде есть момент:
if(...)
(B *)&A->method;
else
(D *)&A->method;
<<< Вот это не работает.

Я понимаю почему так нельзя.
Вопрос в том, как выйти из положения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2013, 15:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Концептуальная задача по ООП (виртуальное наследование в C++) (C++):

Виртуальное наследование - C++
Образно говоря: Class A { private: ... public: virtual void f() {...} } class B1: virtual public A { private:

Виртуальное наследование - C++
Здравствуйте, объясните как реализовано(внутри)под капотом виртуальное наследование? Например виртуальные методы реализованы через...

Виртуальное наследование - C++
Вопрос возник. Собственно, теоретически для чего используется виртуальное наследование я усвоил. Каким образом реализуется это самое...

Виртуальное наследование - C++
Ребят, кто - нибуть может на простом примере показать, накой нужно виртуальное наследование классов (class B : public virtual A) ?

Не могу понять виртуальное наследование - C++
Непонятны несколько моментов. Как строятся таблицы виртуальных классов? Есть базовый класс, У него два предка. А еще есть третий...

Виртуальное наследование (указатель на базовый класс) - C++
У меня ромбическая иерархия классов, при попытке вызвать метод производного класса ошибка, что я не так делаю? Вот исходный код ...

20
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
06.12.2013, 16:39 #16
Цитата Сообщение от lanakramoleb Посмотреть сообщение
Точнее, всё гораздо сложнее. Сам метод описан только в B, а уже из него должен вызывается метод, который в B и D разный. Но вызывается всегда из B.
Мда...) Определение метода можно увидеть?
0
lanakramoleb
1 / 1 / 0
Регистрация: 18.09.2012
Сообщений: 32
06.12.2013, 16:46  [ТС] #17
Которого?
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
06.12.2013, 16:48 #18
Цитата Сообщение от lanakramoleb Посмотреть сообщение
Которого?
Тот, что описан в B и вызывает другие.
0
lanakramoleb
1 / 1 / 0
Регистрация: 18.09.2012
Сообщений: 32
06.12.2013, 17:08  [ТС] #19
ничего в нём особенного... метод как метод )
смысл такой:

project.h:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
.
.
.
class A
{
/* ... */
}
.
.
.
class B : public A
{
    /* ... */
    int method1(int x);
    int method2(int y);
    /* ... */
}
.
.
.
class C : public virtual B
{
    /* ... */
}
.
.
.
class D : public B
{
    /* ... */
    int method2(int y);
    /* ... */
}
.
.
.
project.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
.
.
.
int B::method1(int x)
{
    /* ... */
    z = method2(k);
    /* ... */
}
int B::method2(int y)
{
    /* ... */
}
.
.
.
int D::method2(int y)
{
    /* ... */
}
.
.
.
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
06.12.2013, 17:20 #20
lanakramoleb, :/ виртуальные методы же http://ideone.com/1P7JmZ
1
lanakramoleb
1 / 1 / 0
Регистрация: 18.09.2012
Сообщений: 32
06.12.2013, 17:30  [ТС] #21
Спасибо. Да, должно помочь.
Но уже в понедельник...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2013, 17:30
Привет! Вот еще темы с ответами:

Может ли виртуальное наследование быть одиночным? - C++
виртуальное наследование это множественное наследование, при котором нескольким классам, имеющим один базовый всегда сопоставляется один...

Для чего нужны виртуальные функции и виртуальное наследование ? - C++
Для чего нужны виртуальные функции и виртуальное наследование ? Я нашел не сколько статей но не все понял. Заранее спасибо!

ООП.Наследование - C++
Здравствуйте.Помогите отредактировать код. Прикрепил скрин задания(Вверху,то как примерно должно получиться решение,ниже само задание). Не...

ООП и наследование - C++
Доброго времени суток, форумчане. Столкнулся с такой непонятной ситуацией. Есть класс А class A { private: int i=1; public: ...


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

Или воспользуйтесь поиском по форуму:
21
Yandex
Объявления
06.12.2013, 17:30
Ответ Создать тему
Опции темы

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