Объектный полиморфизм

339
27 декабря 2016, 00:37

Есть QTabWidget tabs. В нем лежат виджеты вкладок, в каждой вкладке есть layout, в этом layout'e QScrollArea со своим layout'om. И при получении конкретной вкладки в любой другой функции я пишу QWidget* tab = new tabs->widget(0). И мне нужно поместить на эту вкладку в layout QScrollArea виджеты и чтобы не писать tab->layout()->widget->layout()->addWidget(someWidget) я хочу перегрузить функцию layout(), чтобы для вызова tab->layout() возвращался сразу layout внутри QScrollArea, но в QWidget функция layout() не виртуальная, поэтому при tab->layout() все равно возвращается первый layout в виджете вкладки. Можно это как-нибудь обойти без dynamic_cast<Tab*>(tab)->layout()

Answer 1

Если функция не виртуальная, то обычными способами ее перегрузить не получиться, но можно попробовать перекрыть ее. Унаследовать класс и в дочерний класс добавить метод с той же семантикой, он и перекроет ее. Вот пример:

#include <string>
#include <iostream>
class A
{
public:
    std::string get()
    {
        return "A::get";
    }
};
class B : public A
{
public:
    std::string get()
    {
        return "B::get";
    }
};
int main()
{
    std::cout << B().get() << '\n';
}

Результат http://ideone.com/sFtqKH Но если обьект по полиморфизму станет родительским, то вызовется метод класса А

READ ALSO
Несколько классов в одном файле

Несколько классов в одном файле

Является ли дурным тоном описывать и реализовывать несколько классов в одном файле-заголовочнике и одномсрр-файле соответственно? Например,...

693
В созданном шаблоне отсутствует файл с исходным кодом

В созданном шаблоне отсутствует файл с исходным кодом

При создании шаблона проекта С++ в Visual Studio 2015 Update 3, проект собирается, шаблон создается, устанавливается, но в нем отсутствует файл с исходным...

351
Передача указателей в функцию C++

Передача указателей в функцию C++

Вопрос по C++При передаче обычной переменной в функцию создается, как я понимаю, её копия

396
Вставить заданное слово после слова, кол-во букв которого четное

Вставить заданное слово после слова, кол-во букв которого четное

Как вставить заданное слово? Конкретно интересует функция InputWordЕсли я правильно понимаю, то я сначала должен увеличить память на кол-во символов...

349