Название: Что означает QWidget(parent) в списке инициализаторов? Отправлено: AAXEE от Февраль 09, 2009, 22:25 Здравствуйте!
Во многих примерах при наследовании класса в реализации конструктора встречается вот такая конструкция( извините за тавтологию): MyClass::MyClass(QWidget *parent) : QWidget(parent) { // any code } Насколько я знаю, то что стоит после двоеточия называется списком инициализаторов. Но ведь в нем инициализируются поля. а тут не понятно чего. Как понимать ТО, что выделено жирным? Название: Re: Что означает QWidget(parent) в списке инициализаторов? Отправлено: Hellraiser от Февраль 09, 2009, 22:40 Этот класс унаследован от QWidget и при выполнении его конструктора (MyClass) вначале будет вызван конструктор базового класса QWidget с параметром parent.
Название: Re: Что означает QWidget(parent) в списке инициализаторов? Отправлено: AAXEE от Февраль 09, 2009, 22:50 Спасибо. Я и сам так предполагал.
Но все же в литературе подтверждения найти не смог=) Более того, повторюсь, написано, что после двоеточия должны идти поля, а не методы. Название: Re: Что означает QWidget(parent) в списке инициализаторов? Отправлено: Hellraiser от Февраль 09, 2009, 22:55 Первым после двоеточия к конструкторе унаследованного класса всегда идет конструктор базового.
Название: Re: Что означает QWidget(parent) в списке инициализаторов? Отправлено: AAXEE от Февраль 09, 2009, 22:58 Хорошо, спасибо.
Попробую найти что-нибудь из литературы по этой теме. Название: Re: Что означает QWidget(parent) в списке инициализаторов? Отправлено: kuzulis от Февраль 10, 2009, 08:36 а я понимаю так, что то что выделено жирным - это просто для укорочения записи.. например:
есть класс: *.h Код: class MyClass: public QObject и в реализации мы можем написать двумя путями: 1. Код: MyClass::MyClass(int Param1, int Param2) Код: MyClass::MyClass(int Param1, int Param2) Я так понимаю, что это одно и тоже... Но вот именно с параметром parent я тоже не знаю... Изменится ли что нибудь если не писать : QWidget(parent) ? Название: Re: Что означает QWidget(parent) в списке инициализаторов? Отправлено: Rcus от Февраль 10, 2009, 08:54 http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.6
Название: Re: Что означает QWidget(parent) в списке инициализаторов? Отправлено: lit-uriy от Февраль 10, 2009, 11:14 >Изменится ли что нибудь если не писать : QWidget(parent) ?
долго ли попробовать? Название: Re: Что означает QWidget(parent) в списке инициализаторов? Отправлено: kuzulis от Февраль 10, 2009, 11:41 Не изменится :)
Название: Re: Что означает QWidget(parent) в списке инициализаторов? Отправлено: Rcus от Февраль 10, 2009, 11:43 /*sigh*/
А если не писать то кто же parent ставить будет? И еще попробуйте унаследоваться от класса без конструктора по-умолчанию и не писать конструктор базового класса в списке инициализации :) Название: Re: Что означает QWidget(parent) в списке инициализаторов? Отправлено: Dendy от Февраль 11, 2009, 15:27 А parent не нужен! Это в вас переходной возраст заговорил. Проблема отцов и детей. Детям кажется что они всё знают, а parent не нужен. Установка родительского обьекта присутствует, так как это очень популярная операция. И чтобы не ошибиться её добавили в конструктор QObject, QWidget. Правила хорошего тона предполагают наличие в собственных классах конструктора, который передаст родительский обьект выше по цепочке унаследованных классов, вплоть до QObject. А зачем нужен этот самый parent - читайте в Ассистанте. |