Russian Qt Forum

Qt => Вопросы новичков => Тема начата: demaker от Апрель 13, 2012, 16:50



Название: вопрос по ООП в Qt
Отправлено: demaker от Апрель 13, 2012, 16:50
Извините за тупой вопрос :)
Вот когда пишут в описание класса(в конструкторе класса)

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

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


Название: Re: вопрос по ООП в Qt
Отправлено: demaker от Апрель 13, 2012, 16:55
Нет неправильно выразился - по умолчанию нулевой :)


Название: Re: вопрос по ООП в Qt
Отправлено: alexis031182 от Апрель 13, 2012, 17:12
Тут наверное надо определиться для себя в понятиях. На самом деле предком для MyClass является OldClass. А у OldClass, при условии, что тот унаследован от QObject, предком будет ... QObject. Другими словами, для класса родителем является тот класс, который объявлен в частном случае в определении как public.

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

Надеюсь, не запутал ещё больше )


Название: Re: вопрос по ООП в Qt
Отправлено: Igors от Апрель 13, 2012, 17:22
это значит получается у него нет предка ( нулевой указатель)
Слово "предок" употребляют по отношению к иерархии классов, напр OldClass - предок MyClass.
Слово "родитель" употребляют по отношению к иерархии объектов, которая поддерживается Qt (но не языком) и в общем случае никак не связана с классами/типами. Невозможно создать объект не имеющий класса/типа, но не имеющего родителя - пожалуйста


Название: Re: вопрос по ООП в Qt
Отправлено: GreatSnake от Апрель 13, 2012, 17:23
Надеюсь, не запутал ещё больше )
Похоже, что ты сам запутался, т.к. перепутал наследование с иерархией объектов.


Название: Re: вопрос по ООП в Qt
Отправлено: alexis031182 от Апрель 13, 2012, 17:28
Не перепутал, почему и уточнил по поводу словарных симлинков в самом начале.


Название: Re: вопрос по ООП в Qt
Отправлено: cya-st от Апрель 14, 2012, 20:54
Цитировать
Надеюсь, не запутал ещё больше )
:o ???


Название: Re: вопрос по ООП в Qt
Отправлено: alexis031182 от Апрель 15, 2012, 10:52
:o ???
?


Название: Re: вопрос по ООП в Qt
Отправлено: demaker от Апрель 16, 2012, 13:03
Получается так предок есть, а родителя может не быть.

Я к тому что -> 

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

object =  new newThread_Object(this);

object =  new newThread_Object(0);

Спасибо! :)


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


Название: Re: вопрос по ООП в Qt
Отправлено: alexis031182 от Апрель 16, 2012, 13:33
Если в переопределённой функции QThread::run() создать новый объект с указателем this, то будет выведена ошибка. Так делать нельзя. В то же время, можно указать вновь создаваемому объекту this, если это производится, например, в конструкторе унаследованного от QThread класса.

Дополнительно: Потоки, cобытия и объекты QObject (http://habrahabr.ru/post/115830/)


Название: Re: вопрос по ООП в Qt
Отправлено: demaker от Апрель 16, 2012, 13:52
Спасибо за разъяснения ;)


Название: Re: вопрос по ООП в Qt
Отправлено: demaker от Апрель 16, 2012, 14:08
А вот еще такой вопрос.
Прочитал обсуждение по ссылочке
http://www.prog.org.ru/index.php?topic=21516.msg149271#msg149271

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


Название: Re: вопрос по ООП в Qt
Отправлено: RealDuke от Апрель 16, 2012, 15:05
А вот еще такой вопрос.
Прочитал обсуждение по ссылочке
http://www.prog.org.ru/index.php?topic=21516.msg149271#msg149271

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


Название: Re: вопрос по ООП в Qt
Отправлено: Igors от Апрель 16, 2012, 15:32
И не понял ничего, кроме того что в конструкторе класса, унаследованного от абстрактного, нельзя использовать виртуальные методы абстрактного класса. Я прав или нет ???
В конструкторах и деструкторах базовых классов будут вызываться виртуалы их (базовых) классов. Несмотря на то что этот конструктор/деструктор зовется из порожденного, тот порожденный или еще не создан или уже разрушен.

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

А от какого слова "жжоте"?  :)


Название: Re: вопрос по ООП в Qt
Отправлено: RealDuke от Апрель 16, 2012, 15:38
Старая и неплохая книжка, но многое в ней, на мой взгляд, звучит слишком категорично. Типа "никаких исключений. Точка". Хотя для тех кто не любит сомневаться - это наверное самый кайф.
Те кто не любит сомневаться, книжек не читают, они и так всё знают :)


Название: Re: вопрос по ООП в Qt
Отправлено: demaker от Апрель 17, 2012, 09:59
Спасибо ;)