Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> пример из книги 
V
    Опции темы
yngwie19
Дата 12.6.2009, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Здравствуйте вот пример из книги здесь объясняется механизм свойств, у меня есть несколько вопросов:
user posted image 
Почему тут написано что из программы, мы можем изменить значение нашего свойства так:
Код
pobj->setProperty("readOnly",true)

1) из main() мы этого не зделаем, т.к объект pobj объявлен в конструкторе MyClass. Что имеется в виду
2) поясните пожалуйста эту строчку:
Код
MyClass(QObject *proj = 0) : QObject(proj), m_bReadOnly(false)


зачем нам инициализировать конструктор базового класса QObject что-то Я подзабыл, знаю что это нужно.
PM MAIL   Вверх
ller
Дата 12.6.2009, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.8.2008
Где: г. Таганрог

Репутация: 2
Всего: 4



Затем что производный клас, это дополнение базового, и сначало нужни инициализировать базовый клас, а потом спицифичное для потомка.
PM MAIL   Вверх
yngwie19
Дата 12.6.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



ller, это все понятно, но Я не могу себе это представить. При создании объекта производного класса сначала вызывается конструктор базового класса, и что это нам дает?
PM MAIL   Вверх
andrew_121
Дата 12.6.2009, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



yngwie19, На этот вопрос даже отвечать не хочется.
Вот: http://forum.vingrad.ru/index.php?showtopi...t&p=1893904

П.С.
Не нужно дублировать!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
yngwie19
Дата 12.6.2009, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



andrew_121, мне сказали что этот вопрос про конструктор базового класса относится к разделу для новичков, поэтому Я и создал здесь эту тему. А в той теме обсуждается другой вопрос.  
PM MAIL   Вверх
andrew_121
Дата 12.6.2009, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



yngwie19, Ладно.
Но ссылочкой воспользуйся. Твой вопрос про конструкторы и наследование, даже для раздела новичков прост)


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
yngwie19
Дата 12.6.2009, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Можно тогда пояснить про это
Цитата(yngwie19 @  12.6.2009,  13:12 Найти цитируемый пост)
Почему тут написано что из программы, мы можем изменить значение нашего свойства так:

pobj->setProperty("readOnly",true)

из main() мы этого не зделаем, т.к объект pobj объявлен в конструкторе MyClass. Что имеется в виду



Это сообщение отредактировал(а) yngwie19 - 12.6.2009, 14:27
PM MAIL   Вверх
andrew_121
Дата 12.6.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Кто такой pobj, и от кого унаследован твой объект?
Сможешь ответить? Это и есть ответ.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
ller
Дата 12.6.2009, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.8.2008
Где: г. Таганрог

Репутация: 2
Всего: 4



И еще не забывай про область видимости, где он объявлен
PM MAIL   Вверх
yngwie19
Дата 12.6.2009, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



посмотрите на картинку, Почему тут написано что из программы, мы можем изменить значение нашего свойства так:
Код

pobj->setProperty("readOnly",true);


PM MAIL   Вверх
mes
Дата 12.6.2009, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(yngwie19 @  12.6.2009,  21:43 Найти цитируемый пост)
посмотрите на картинку, Почему тут написано что из программы, мы можем изменить значение нашего свойства так:

Вы наверно путаете о каком pobj идет речь. Со всем не о параметре передаваемого в конструктор, а о примерно следующем:
Код

QObject * pobj = new MyClass (); 
pobj->setProperty("readOnly",true);



--------------------
PM MAIL WWW   Вверх
yngwie19
Дата 12.6.2009, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



mes, ну понятно значит пример из книги не полный. Этот Шлее очень запутал. Теперь вроде понятно. Осталось только вспомнить зачем при создании объекта производного класса нужно инициализировать конструктор базового класса?

Добавлено через 14 минут и 12 секунд
в принципе в данном примере нет необходимости инициализировать конструктор базового класса, можно записать просто:
Код

MyClass(QObject *proj = 0) :  m_bReadOnly(false)

PM MAIL   Вверх
mes
Дата 13.6.2009, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(yngwie19 @  12.6.2009,  22:10 Найти цитируемый пост)
Осталось только вспомнить зачем при создании объекта производного класса нужно инициализировать конструктор базового класса?

Для того же, для чего чего инициализируется производный. smile
Но мне кажется Вас больше интересует не общий вопрос об инициализации, а зачем в конструктор передается указатель на объект.
Для этого открываем : http://doc.trolltech.com/4.5/qobject.html#QObject и видим что этот параметр означает указатель на предка.
 smile

Добавлено через 3 минуты и 56 секунд
Цитата(yngwie19 @  12.6.2009,  22:10 Найти цитируемый пост)
значит пример из книги не полный. Этот Шлее очень запутал

Шлее тут не причем. Вы запутались потому что акцептировали внимание на названии переменной, которое волей случая оказалось одинаковым у двух объектов, и приняли разные объекты за один.
 smile 


--------------------
PM MAIL WWW   Вверх
yngwie19
Дата 13.6.2009, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



mes, т.е всегда когда мы наследуем от класса QObject, или создаем объект класса QObject, то в качестве параметра создаваемого объекта должны указать адрес родительского объекта, а если его нет то NULL ? 
PM MAIL   Вверх
mes
Дата 13.6.2009, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(yngwie19 @  13.6.2009,  09:03 Найти цитируемый пост)
т.е всегда когда мы наследуем от класса QObject, или создаем объект класса QObject, то в качестве параметра создаваемого объекта должны указать адрес родительского объекта, а если его нет то NULL ?

несколько не так- не должны, а можем : объект класса QObject позволяет задать родителя, если это нужно. Ну а наследникам самим решать оставлять такую возможность или нет smile




--------------------
PM MAIL WWW   Вверх
yngwie19
Дата 13.6.2009, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



mes, значит при наследовании от QObject мы можем не вызывать конструктор базового класса?
Код

MyClass(QObject *proj = 0) :  m_bReadOnly(false)

PM MAIL   Вверх
mes
Дата 13.6.2009, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(yngwie19 @  13.6.2009,  10:41 Найти цитируемый пост)
значит при наследовании от QObject мы можем не вызывать конструктор базового класса?

да, если так Вам будет удобнее.



--------------------
PM MAIL WWW   Вверх
andrew_121
Дата 13.6.2009, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(mes @  13.6.2009,  13:14 Найти цитируемый пост)
да, если так Вам будет удобнее.

Как так? smile
Не советовал бы! Это плохо в общем. А касательно Qt, очень плохо!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
yngwie19
Дата 13.6.2009, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



andrew_121, если писать без конструктора так:
Код

MyClass() :  m_bReadOnly(false)

то будет вызван конструктор по-умолчанию а он описан так:
Код

QObject(QObject *parent=0);

Поэтому это будет одно и тоже верно mes?
PM MAIL   Вверх
andrew_121
Дата 13.6.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



yngwie19, Уважаемый, вы наверняка не представляете себе всю обширность и мощь языка С++ как такового, и сложность Qt в частности.
Это было первое.
Второе. Как в это случае указать parent-а, хз*
Третье. Большинству кутешных объектов, нужен parent. Иначе они просто работать не будут.
Четвертое. Если привыкнуть так писать код, однажды споткнетесь, и придется писать как положено.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
mes
Дата 13.6.2009, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(yngwie19 @  13.6.2009,  12:29 Найти цитируемый пост)
Поэтому это будет одно и тоже

Да, инизиализация в данном случаяе одинаково Но я думаю andrew_121, имел ввиду не саму инициализацию, а то что Вы убрали в вашем классе возможность задавать parent`a.
по крайней мере моя фраза 
Цитата(mes @  13.6.2009,  12:14 Найти цитируемый пост)
если так Вам будет удобнее.

относилась именно к этому.
 т.е если Вы уверены, что лишение возможности задавать родителя необходимо или удобно, то пожалуйста.  smile 



--------------------
PM MAIL WWW   Вверх
andrew_121
Дата 13.6.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Дополню. Касательно стандарта.
Так же плохо изучать программирование используя компиляторы от Microsoft, Borland. Так как эти компиляторы приучают к плохому!

Добавлено через 2 минуты и 21 секунду
Цитата(mes @  13.6.2009,  13:14 Найти цитируемый пост)
если так Вам будет удобнее.

Я так понимаю, что yngwie19, только учится кодить. Наверное лучше его не приучать к не стандартному решению?

Добавлено через 5 минут и 9 секунд
Цитата(yngwie19 @  13.6.2009,  13:29 Найти цитируемый пост)
MyClass() :  m_bReadOnly(false)

Касательно машинных типов, для них вобще не нужно вызывать конструктор. Это просто инициализация.

Добавлено через 7 минут и 43 секунды
И еще.
Нужно определиться. Либо говорим о языке С++, и стандарте, либо о C++ и Qt.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
mes
Дата 13.6.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(andrew_121 @  13.6.2009,  12:47 Найти цитируемый пост)
Я так понимаю, что yngwie19, только учится кодить. Наверное лучше его не приучать к не стандартному решению? 

я считаю, что в программировании главное понимание, а не набор заученных фраз. Да сразу все понять нельзя и некоторые детали приходится зазубривать.
Но судя по вопросам(из других тем) yngwie19, он пытается именно понять. 

Цитата(andrew_121 @  13.6.2009,  12:39 Найти цитируемый пост)
Третье. Большинству кутешных объектов, нужен parent.

Ну а тут жизнь сама заставит написать у наследника "прием" родителя. smile


Это сообщение отредактировал(а) mes - 13.6.2009, 13:55


--------------------
PM MAIL WWW   Вверх
yngwie19
Дата 13.6.2009, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Ну вообщем правильно ли Я понял что при создании объекта класса унаследованного от QObject необходимо в его конструктор передать указатель на родителя? 
PM MAIL   Вверх
mes
Дата 13.6.2009, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(andrew_121 @  13.6.2009,  12:47 Найти цитируемый пост)
Касательно машинных типов, для них вобще не нужно вызывать конструктор. Это просто инициализация.

А кто ему вызывает конструктор ?!  smile 
Эта переменная вообще к разговору отношения не имеет.  smile 


--------------------
PM MAIL WWW   Вверх
andrew_121
Дата 13.6.2009, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(mes @  13.6.2009,  13:55 Найти цитируемый пост)
я считаю, что в программировании главное понимание, а не набор заученных фраз.

Солидарен!
Цитата(mes @  13.6.2009,  13:55 Найти цитируемый пост)
Ну а тут жизнь сама заставит написать у наследника "прием" родителя.

Значит...пусть решает...

Добавлено через 1 минуту и 8 секунд
Цитата(mes @  13.6.2009,  13:59 Найти цитируемый пост)
А кто ему вызывает конструктор ?!  smile 
Эта переменная вообще к разговору отношения не имеет.  smile  

Ну...она в коде....сорри, не то понял(


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
mes
Дата 13.6.2009, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(yngwie19 @  13.6.2009,  12:59 Найти цитируемый пост)
Ну вообщем правильно ли Я понял что при создании объекта класса унаследованного от QObject необходимо в его конструктор передать указатель на родителя?  

Нет. Необходимо передавать в конструктор, только для объектов тех  классов, которые этого требуют.  Для остальных "можно", а не "необходимо" smile

Но пояснение, высказанное andrew_121, относится не к созданию объекта, а к тому что Вы в конструкторе скрыли возможность "передачи" родителя.
Т.е ограничили того, кто будет создавать объект Вашего класса или будет от него наследоваться smile
А ограничения далеко не всегда удобны. 


Это сообщение отредактировал(а) mes - 13.6.2009, 14:42


--------------------
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0684 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.