Russian Qt Forum
Ноябрь 05, 2024, 22:07
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
вопрос по ООП в Qt
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: вопрос по ООП в Qt (Прочитано 7042 раз)
demaker
Птица говорун
Offline
Сообщений: 962
вопрос по ООП в Qt
«
:
Апрель 13, 2012, 16:50 »
Извините за тупой вопрос
Вот когда пишут в описание класса(в конструкторе класса)
class MyClass: public OldClass
{
MyClass(QObject *parent = 0);
...
}
это значит получается у него нет предка ( нулевой указатель)
так?
Спасибо!
Записан
demaker
Птица говорун
Offline
Сообщений: 962
Re: вопрос по ООП в Qt
«
Ответ #1 :
Апрель 13, 2012, 16:55 »
Нет неправильно выразился - по умолчанию нулевой
Записан
alexis031182
Гость
Re: вопрос по ООП в Qt
«
Ответ #2 :
Апрель 13, 2012, 17:12 »
Тут наверное надо определиться для себя в понятиях. На самом деле предком для MyClass является OldClass. А у OldClass, при условии, что тот унаследован от QObject, предком будет ... QObject. Другими словами, для класса родителем является тот класс, который объявлен в частном случае в определении как public.
Что касаемо "QObject *parent", этот случай можно представлять как параллельное наследование или, например, организация некоей взаимосвязи между объектами классов. Даже если в конструкторе MyClass передать NULL, то это не будет означать, что MyClass, а также OldClass не имеют предка QObject, как раз наоборот - имеют. Просто их предок не будет иметь функциональной взаимосвязи с другим объектом класса QObject.
Надеюсь, не запутал ещё больше )
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: вопрос по ООП в Qt
«
Ответ #3 :
Апрель 13, 2012, 17:22 »
Цитата: demaker от Апрель 13, 2012, 16:50
это значит получается у него нет предка ( нулевой указатель)
Слово "предок" употребляют по отношению к иерархии
классов
, напр OldClass - предок MyClass.
Слово "родитель" употребляют по отношению к иерархии
объектов
, которая поддерживается Qt (но не языком) и в общем случае никак не связана с классами/типами. Невозможно создать объект не имеющий класса/типа, но не имеющего родителя - пожалуйста
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: вопрос по ООП в Qt
«
Ответ #4 :
Апрель 13, 2012, 17:23 »
Цитата: alexis031182 от Апрель 13, 2012, 17:12
Надеюсь, не запутал ещё больше )
Похоже, что ты сам запутался, т.к. перепутал наследование с иерархией объектов.
Записан
Qt 5.11/4.8.7 (X11/Win)
alexis031182
Гость
Re: вопрос по ООП в Qt
«
Ответ #5 :
Апрель 13, 2012, 17:28 »
Не перепутал, почему и уточнил по поводу словарных симлинков в самом начале.
Записан
cya-st
Гость
Re: вопрос по ООП в Qt
«
Ответ #6 :
Апрель 14, 2012, 20:54 »
Цитировать
Надеюсь, не запутал ещё больше )
Записан
alexis031182
Гость
Re: вопрос по ООП в Qt
«
Ответ #7 :
Апрель 15, 2012, 10:52 »
Цитата: cya-st от Апрель 14, 2012, 20:54
?
Записан
demaker
Птица говорун
Offline
Сообщений: 962
Re: вопрос по ООП в Qt
«
Ответ #8 :
Апрель 16, 2012, 13:03 »
Получается так предок есть, а родителя может не быть.
Я к тому что ->
Есть основной поток GeneralThread и в нем создается другой NewThread, но этот другой поток получается создан в основном.
А в другом потоке NewThread создается объект newThread_Object.
Если я сделаю указатель this при его создании, то к какому потоку он принадлежать?
object = new newThread_Object(this);
object = new newThread_Object(0);
Спасибо!
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: вопрос по ООП в Qt
«
Ответ #9 :
Апрель 16, 2012, 13:27 »
Цитата: demaker от Апрель 16, 2012, 13:03
А в другом потоке NewThread создается объект newThread_Object.
Если я сделаю указатель this при его создании, то к какому потоку он принадлежать?
Тому же что и родитель, в данном случае главному. Если родитель NULL, то той нитке которая выполняется в данный момент. Вообще для ниток лучше просто ставить родителя NULL, т.к. здесь не UI и от parent-child мало толку - все равно все нитки придется корректно завершать, удалить просто так родителя не получится. А если требуется изменить принадлежность объекта к нитке - используйте moveToThread, это как бы еще одна иерархия
Записан
alexis031182
Гость
Re: вопрос по ООП в Qt
«
Ответ #10 :
Апрель 16, 2012, 13:33 »
Если в переопределённой функции QThread::run() создать новый объект с указателем this, то будет выведена ошибка. Так делать нельзя. В то же время, можно указать вновь создаваемому объекту this, если это производится, например, в конструкторе унаследованного от QThread класса.
Дополнительно:
Потоки, cобытия и объекты QObject
«
Последнее редактирование: Апрель 16, 2012, 13:36 от alexis031182
»
Записан
demaker
Птица говорун
Offline
Сообщений: 962
Re: вопрос по ООП в Qt
«
Ответ #11 :
Апрель 16, 2012, 13:52 »
Спасибо за разъяснения
Записан
demaker
Птица говорун
Offline
Сообщений: 962
Re: вопрос по ООП в Qt
«
Ответ #12 :
Апрель 16, 2012, 14:08 »
А вот еще такой вопрос.
Прочитал обсуждение по ссылочке
http://www.prog.org.ru/index.php?topic=21516.msg149271#msg149271
И не понял ничего, кроме того что в конструкторе класса, унаследованного от абстрактного, нельзя использовать виртуальные методы абстрактного класса. Я прав или нет
Записан
RealDuke
Гость
Re: вопрос по ООП в Qt
«
Ответ #13 :
Апрель 16, 2012, 15:05 »
Цитата: demaker от Апрель 16, 2012, 14:08
А вот еще такой вопрос.
Прочитал обсуждение по ссылочке
http://www.prog.org.ru/index.php?topic=21516.msg149271#msg149271
И не понял ничего, кроме того что в конструкторе класса, унаследованного от абстрактного, нельзя использовать виртуальные методы абстрактного класса. Я прав или нет
хахахахахаха, ну блин вы и жжоте со своими выводами. Советую прочитать
http://rutracker.org/forum/viewtopic.php?t=1471956
лучше всю книгу, но если лень то только про конструкторы\деструкторы и виртуальные функции.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: вопрос по ООП в Qt
«
Ответ #14 :
Апрель 16, 2012, 15:32 »
Цитата: demaker от Апрель 16, 2012, 14:08
И не понял ничего, кроме того что в конструкторе класса, унаследованного от абстрактного, нельзя использовать виртуальные методы абстрактного класса. Я прав или нет
В конструкторах и деструкторах
базовых
классов будут вызываться виртуалы их (базовых) классов. Несмотря на то что этот конструктор/деструктор зовется из порожденного, тот порожденный или еще не создан или уже разрушен.
Цитата: RealDuke от Апрель 16, 2012, 15:05
хахахахахаха, ну блин вы и жжоте со своими выводами. Советую прочитать
http://rutracker.org/forum/viewtopic.php?t=1471956
лучше всю книгу, но если лень то только про конструкторы\деструкторы и виртуальные функции.
Старая и неплохая книжка, но многое в ней, на мой взгляд, звучит слишком категорично. Типа "никаких исключений. Точка". Хотя для тех кто не любит сомневаться - это наверное самый кайф.
А от какого слова "жжоте"?
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...