Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Slip.
92 / 92 / 33
Регистрация: 17.03.2012
Сообщений: 536
Завершенные тесты: 1
1

Больше, чем ромбовидное наследование и разрешение этой ситуации

22.02.2018, 14:40. Просмотров 133. Ответов 2
Метки нет (Все метки)

Вопрос не совсем в ту тему, вопрос связан, скорее, с ООП, но отталкиваемся от кутишных классов, так что...
В общем, есть QAbstractItemView и два его public наследника QTreeView & QTableView
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
class QAbstractItemView
{
    virtual foo();
}
 
class QTableView : public QAbstractItemView
{
    foo() override;
}
class QTreeView : public QAbstractItemView
{
    foo() override;
}
Есть мой класс интерфейсный, и два класса представления
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MyInterface
{
    virtual doSomething() = 0;
}
 
class FirstView : public QTableView, public MyInterface
{
    foo() override;
    doSomething() override;
}
class SecondView : public QTreeView, public MyInterface
{
    foo() override;
    doSomething() override;
}
Что я хочу? Хочу сделать типа того
C++ (Qt)
1
2
3
FirstView*p_firstView = new FirstView;
SecondView *p_secondView = new SecondView;
MyView *p_myView = p_firstView;
Для этого нужно MyView включить в иерархию, по-идее. Вопрос: Как такое сделать лучше?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2018, 14:40
Ответы с готовыми решениями:

Ромбовидное наследование
Дважды выводится имя и год.(со вводом то же самое) Базовый: void operator...

Создание окна больше, чем разрешение экрана
При попытках создать окно больше чем 1920х1080, QWidget выдает ошибку и...

Ромбовидное наследование
все 4 класса используются в одном месте (имеют примерно один функционал). у...

Ромбовидное наследование. Деструкторы.
глобальная цель - ромбовидное наследование. Сейчас цель - разобраться с...

Про ромбовидное наследование
Доброе время форумчане! Имеем 3 класс! class A { }; class b { };...

2
Peoples
1358 / 845 / 751
Регистрация: 06.02.2016
Сообщений: 2,253
Записей в блоге: 18
Завершенные тесты: 4
22.02.2018, 16:46 2
Ну я так понимаю MyView должен быть базовым для FirstView, что бы делать так
Цитата Сообщение от Slip. Посмотреть сообщение
MyView *p_myView = p_firstView;
Может как-нибудь так тогда
C++ (Qt)
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
37
38
39
40
41
42
#include <iostream>
 
class QAbstractItemView
{
    virtual void foo()=0;
};
 
class QTableView : public QAbstractItemView
{
    void foo() override{}
};
class QTreeView : public QAbstractItemView
{
    void foo() override{}
};
 
class MyInterface
{
    virtual void doSomething() = 0;
};
 
class MyView:public  MyInterface{
    
};
 
class FirstView : public QTableView, public MyView
{
    void foo() override{}
    void doSomething() override{}
};
class SecondView : public QTreeView, public MyView
{
    void foo() override{}
    void doSomething() override{}
};
 
int main()
{
 FirstView*p_firstView = new FirstView;
 SecondView *p_secondView = new SecondView;
 MyView *p_myView = p_firstView;
}
0
Slip.
92 / 92 / 33
Регистрация: 17.03.2012
Сообщений: 536
Завершенные тесты: 1
22.02.2018, 17:25  [ТС] 3
Неправильно я мысль донес. Сам запутался и других запутал
Что я делаю сейчас :
C++ (Qt)
1
2
3
4
5
6
7
FirstView*p_firstView = new FirstView;
SecondView *p_secondView = new SecondView;
QAbstractItemView*p_myView = p_firstView;
p_myView->foo();
MyInterface *interface = dynamic_cast<MyInterface*>(p_myView);
if (interface)
    interface->doSomething();
Так оно работает, как надо. То есть doSomething() и foo() вызываются у FirstView.
Что мне не нравится - это каст.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2018, 17:25

Ромбовидное наследование. Конструктор внука.
если хотите, можете почитать код - он довольно объёмный...но однотипный...

Ромбовидное наследование и перегрузка виртуальных функций
Дан класс Parent с виртуальным методом method. У него есть два потомка...

Ромбовидное наследование и ключевое слово virtual
В тех случаях когда имеется ромбовидное наследование пишут что нужно...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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