МЛ
June 29, 2022, 12:15 p.m.

Передача наследников в аргументы функции

Очень часто в Qt сталкиваешься с ситуацией когда у функции объявлен в качестве аргумента базовый класс, но если в нее передавать наследников этого класса то не возникает ошибки и все работает.
Например:
void QTreeWidget::setItemWidget(QTreeWidgetItem item, int column, QWidget widget)

QComboBox *a = new QComboBox();
setItemWidget(item, 1, a);

не вызывает ошибки.
Как это реализовано? Если я объявляю функцию, и пытаюсь в агументе передать экземпляр потомка то это вызывает ошибку.

3

Do you like it? Share on social networks!

2
Михаил Сермяжко
  • June 29, 2022, 12:38 p.m.

Это фича плюсов. Т.к. базовый класс включен в наследника

    Evgenii Legotckoi
    • June 29, 2022, 12:54 p.m.

    Полиморфизм в языке программирования так реализован. Можно оперировать указателем на объект наследованного класса через указатель на объект базового класса. В данном случае можно будет вызывать только public методы базового класса, если потребуется вызывать публичные наследники, то нужно будет сделать каст указателя из указателя на объект базового класса, до указателя на объект наследника.

    Посмотрите эту статью Qt/C++ - Урок 027. Полиморфизм в Qt на примере геометрических фигур в QGraphicsScene . Может это поможет вам лучше разобраться в этому вопросе.

      Comments

      Only authorized users can post comments.
      Please, Log in or Sign up
      • Last comments
      • AK
        April 24, 2025, 12:04 p.m.
        UPD: Переписал логику воспроизведения через стороннюю библиотеку BASS. Там выбрать можно
      • Evgenii Legotckoi
        April 16, 2025, 5:08 p.m.
        Благодарю за отзыв. И вам желаю всяческих успехов!
      • IscanderChe
        April 12, 2025, 5:12 p.m.
        Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
      • AK
        April 1, 2025, 11:41 a.m.
        Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
      • Evgenii Legotckoi
        March 9, 2025, 9:02 p.m.
        К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…