Russian Qt Forum
Ноябрь 24, 2024, 17:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: вопрос по ООП в Qt  (Прочитано 7096 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« : Апрель 13, 2012, 16:50 »

Извините за тупой вопрос Улыбающийся
Вот когда пишут в описание класса(в конструкторе класса)

class MyClass: public OldClass
{
         MyClass(QObject *parent = 0);
        ...
}

это значит получается у него нет предка ( нулевой указатель)
так?
Спасибо!
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #1 : Апрель 13, 2012, 16:55 »

Нет неправильно выразился - по умолчанию нулевой Улыбающийся
Записан
alexis031182
Гость
« Ответ #2 : Апрель 13, 2012, 17:12 »

Тут наверное надо определиться для себя в понятиях. На самом деле предком для MyClass является OldClass. А у OldClass, при условии, что тот унаследован от QObject, предком будет ... QObject. Другими словами, для класса родителем является тот класс, который объявлен в частном случае в определении как public.

Что касаемо "QObject *parent", этот случай можно представлять как параллельное наследование или, например, организация некоей взаимосвязи между объектами классов. Даже если в конструкторе MyClass передать NULL, то это не будет означать, что MyClass, а также OldClass не имеют предка QObject, как раз наоборот - имеют. Просто их предок не будет иметь функциональной взаимосвязи с другим объектом класса QObject.

Надеюсь, не запутал ещё больше )
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Апрель 13, 2012, 17:22 »

это значит получается у него нет предка ( нулевой указатель)
Слово "предок" употребляют по отношению к иерархии классов, напр OldClass - предок MyClass.
Слово "родитель" употребляют по отношению к иерархии объектов, которая поддерживается Qt (но не языком) и в общем случае никак не связана с классами/типами. Невозможно создать объект не имеющий класса/типа, но не имеющего родителя - пожалуйста
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Апрель 13, 2012, 17:23 »

Надеюсь, не запутал ещё больше )
Похоже, что ты сам запутался, т.к. перепутал наследование с иерархией объектов.
Записан

Qt 5.11/4.8.7 (X11/Win)
alexis031182
Гость
« Ответ #5 : Апрель 13, 2012, 17:28 »

Не перепутал, почему и уточнил по поводу словарных симлинков в самом начале.
Записан
cya-st
Гость
« Ответ #6 : Апрель 14, 2012, 20:54 »

Цитировать
Надеюсь, не запутал ещё больше )
Шокированный Непонимающий
Записан
alexis031182
Гость
« Ответ #7 : Апрель 15, 2012, 10:52 »

Шокированный Непонимающий
?
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #8 : Апрель 16, 2012, 13:03 »

Получается так предок есть, а родителя может не быть.

Я к тому что -> 

Есть основной поток GeneralThread и в нем создается другой NewThread, но этот другой поток получается создан в основном.
А в другом потоке NewThread создается объект newThread_Object.
Если я сделаю указатель this при его создании, то к какому потоку он принадлежать? Непонимающий

object =  new newThread_Object(this);

object =  new newThread_Object(0);

Спасибо! Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Апрель 16, 2012, 13:27 »

А в другом потоке NewThread создается объект newThread_Object.
Если я сделаю указатель this при его создании, то к какому потоку он принадлежать? Непонимающий
Тому же что и родитель, в данном случае главному. Если родитель NULL, то той нитке которая выполняется в данный момент. Вообще для ниток лучше просто ставить родителя NULL, т.к. здесь не UI и от parent-child мало толку - все равно все нитки придется корректно завершать, удалить просто так родителя не получится. А если требуется изменить принадлежность объекта к нитке - используйте moveToThread, это как бы еще одна иерархия
Записан
alexis031182
Гость
« Ответ #10 : Апрель 16, 2012, 13:33 »

Если в переопределённой функции QThread::run() создать новый объект с указателем this, то будет выведена ошибка. Так делать нельзя. В то же время, можно указать вновь создаваемому объекту this, если это производится, например, в конструкторе унаследованного от QThread класса.

Дополнительно: Потоки, cобытия и объекты QObject
« Последнее редактирование: Апрель 16, 2012, 13:36 от alexis031182 » Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #11 : Апрель 16, 2012, 13:52 »

Спасибо за разъяснения Подмигивающий
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #12 : Апрель 16, 2012, 14:08 »

А вот еще такой вопрос.
Прочитал обсуждение по ссылочке
http://www.prog.org.ru/index.php?topic=21516.msg149271#msg149271

И не понял ничего, кроме того что в конструкторе класса, унаследованного от абстрактного, нельзя использовать виртуальные методы абстрактного класса. Я прав или нет Непонимающий
Записан
RealDuke
Гость
« Ответ #13 : Апрель 16, 2012, 15:05 »

А вот еще такой вопрос.
Прочитал обсуждение по ссылочке
http://www.prog.org.ru/index.php?topic=21516.msg149271#msg149271

И не понял ничего, кроме того что в конструкторе класса, унаследованного от абстрактного, нельзя использовать виртуальные методы абстрактного класса. Я прав или нет Непонимающий
хахахахахаха, ну блин вы и жжоте со своими выводами. Советую прочитать http://rutracker.org/forum/viewtopic.php?t=1471956 лучше всю книгу, но если лень то только про конструкторы\деструкторы и виртуальные функции.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Апрель 16, 2012, 15:32 »

И не понял ничего, кроме того что в конструкторе класса, унаследованного от абстрактного, нельзя использовать виртуальные методы абстрактного класса. Я прав или нет Непонимающий
В конструкторах и деструкторах базовых классов будут вызываться виртуалы их (базовых) классов. Несмотря на то что этот конструктор/деструктор зовется из порожденного, тот порожденный или еще не создан или уже разрушен.

хахахахахаха, ну блин вы и жжоте со своими выводами. Советую прочитать http://rutracker.org/forum/viewtopic.php?t=1471956 лучше всю книгу, но если лень то только про конструкторы\деструкторы и виртуальные функции.
Старая и неплохая книжка, но многое в ней, на мой взгляд, звучит слишком категорично. Типа "никаких исключений. Точка". Хотя для тех кто не любит сомневаться - это наверное самый кайф.

А от какого слова "жжоте"?  Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.136 секунд. Запросов: 23.