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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Что означает QWidget(parent) в списке инициализаторов?  (Прочитано 10013 раз)
AAXEE
Гость
« : Февраль 09, 2009, 22:25 »

Здравствуйте!
Во многих примерах при наследовании класса в реализации конструктора встречается вот такая конструкция( извините за тавтологию):
MyClass::MyClass(QWidget *parent)
    : QWidget(parent)
{
    // any code
}

Насколько я знаю, то что стоит после двоеточия называется списком инициализаторов. Но ведь в нем инициализируются поля. а тут не понятно чего.
Как понимать ТО, что выделено жирным?
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #1 : Февраль 09, 2009, 22:40 »

Этот класс унаследован от QWidget и при выполнении его конструктора (MyClass) вначале будет вызван конструктор базового класса QWidget с параметром parent.
Записан
AAXEE
Гость
« Ответ #2 : Февраль 09, 2009, 22:50 »

Спасибо. Я и сам так предполагал.
Но все же в литературе подтверждения найти не смог=) Более того, повторюсь, написано, что после двоеточия должны идти поля, а не методы.
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #3 : Февраль 09, 2009, 22:55 »

Первым после двоеточия к конструкторе унаследованного класса всегда идет конструктор базового.
Записан
AAXEE
Гость
« Ответ #4 : Февраль 09, 2009, 22:58 »

Хорошо, спасибо.
Попробую найти что-нибудь из литературы по этой теме.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Февраль 10, 2009, 08:36 »

а я понимаю так, что то что выделено жирным - это просто для укорочения записи.. например:
есть класс:
*.h
Код:
class MyClass: public QObject
{
 Q_OBJECT
public:
   MyClass(int Param1, int Param2);
private:
   int Par1;
   int Par2;
};

и в реализации мы можем написать двумя путями:
1.
Код:
MyClass::MyClass(int Param1, int Param2)
{
   Par1 = Param1;
   Par2 = Param2;
}
2.
Код:
MyClass::MyClass(int Param1, int Param2)
: Par1(Param1), Par2(Param2)
{

}

Я так понимаю, что это одно и тоже... Но вот именно с параметром parent я тоже не знаю...

Изменится ли что нибудь если не писать : QWidget(parent) ?
Записан

ArchLinux x86_64 / Win10 64 bit
Rcus
Гость
« Ответ #6 : Февраль 10, 2009, 08:54 »

http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.6
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Февраль 10, 2009, 11:14 »

>Изменится ли что нибудь если не писать : QWidget(parent) ?

долго ли попробовать?
Записан

Юра.
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #8 : Февраль 10, 2009, 11:41 »

Не изменится Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
Rcus
Гость
« Ответ #9 : Февраль 10, 2009, 11:43 »

/*sigh*/
А если не писать то кто же parent ставить будет? И еще попробуйте унаследоваться от класса без конструктора по-умолчанию и не писать конструктор базового класса в списке инициализации Улыбающийся
Записан
Dendy
Гость
« Ответ #10 : Февраль 11, 2009, 15:27 »

А parent не нужен!

Это в вас переходной возраст заговорил. Проблема отцов и детей. Детям кажется что они всё знают, а parent не нужен.

Установка родительского обьекта присутствует, так как это очень популярная операция. И чтобы не ошибиться её добавили в конструктор QObject, QWidget. Правила хорошего тона предполагают наличие в собственных классах конструктора, который передаст родительский обьект выше по цепочке унаследованных классов, вплоть до QObject. А зачем нужен этот самый parent - читайте в Ассистанте.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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