![]() |
|
Модераторы: bsa |
![]()
|
|
| yngwie19 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Здравствуйте вот пример из книги здесь объясняется механизм свойств, у меня есть несколько вопросов:
Почему тут написано что из программы, мы можем изменить значение нашего свойства так:
1) из main() мы этого не зделаем, т.к объект pobj объявлен в конструкторе MyClass. Что имеется в виду 2) поясните пожалуйста эту строчку:
зачем нам инициализировать конструктор базового класса QObject что-то Я подзабыл, знаю что это нужно. |
||||
|
|||||
| ller |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 4.8.2008 Где: г. Таганрог Репутация: 2 Всего: 4 |
Затем что производный клас, это дополнение базового, и сначало нужни инициализировать базовый клас, а потом спицифичное для потомка.
|
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
ller, это все понятно, но Я не могу себе это представить. При создании объекта производного класса сначала вызывается конструктор базового класса, и что это нам дает?
|
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
yngwie19, На этот вопрос даже отвечать не хочется.
Вот: http://forum.vingrad.ru/index.php?showtopi...t&p=1893904 П.С. Не нужно дублировать! -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
andrew_121, мне сказали что этот вопрос про конструктор базового класса относится к разделу для новичков, поэтому Я и создал здесь эту тему. А в той теме обсуждается другой вопрос.
|
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
yngwie19, Ладно.
Но ссылочкой воспользуйся. Твой вопрос про конструкторы и наследование, даже для раздела новичков прост) -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Можно тогда пояснить про это
Это сообщение отредактировал(а) yngwie19 - 12.6.2009, 14:27 |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
Кто такой pobj, и от кого унаследован твой объект?
Сможешь ответить? Это и есть ответ. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| ller |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 4.8.2008 Где: г. Таганрог Репутация: 2 Всего: 4 |
И еще не забывай про область видимости, где он объявлен
|
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
посмотрите на картинку, Почему тут написано что из программы, мы можем изменить значение нашего свойства так:
|
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Вы наверно путаете о каком pobj идет речь. Со всем не о параметре передаваемого в конструктор, а о примерно следующем:
|
||||
|
|||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
mes, ну понятно значит пример из книги не полный. Этот Шлее очень запутал. Теперь вроде понятно. Осталось только вспомнить зачем при создании объекта производного класса нужно инициализировать конструктор базового класса?
Добавлено через 14 минут и 12 секунд в принципе в данном примере нет необходимости инициализировать конструктор базового класса, можно записать просто:
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Для того же, для чего чего инициализируется производный. Но мне кажется Вас больше интересует не общий вопрос об инициализации, а зачем в конструктор передается указатель на объект. Для этого открываем : http://doc.trolltech.com/4.5/qobject.html#QObject и видим что этот параметр означает указатель на предка. Добавлено через 3 минуты и 56 секунд Шлее тут не причем. Вы запутались потому что акцептировали внимание на названии переменной, которое волей случая оказалось одинаковым у двух объектов, и приняли разные объекты за один. |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
mes, т.е всегда когда мы наследуем от класса QObject, или создаем объект класса QObject, то в качестве параметра создаваемого объекта должны указать адрес родительского объекта, а если его нет то NULL ?
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
несколько не так- не должны, а можем : объект класса QObject позволяет задать родителя, если это нужно. Ну а наследникам самим решать оставлять такую возможность или нет |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
mes, значит при наследовании от QObject мы можем не вызывать конструктор базового класса?
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
Как так? Не советовал бы! Это плохо в общем. А касательно Qt, очень плохо! -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| yngwie19 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
andrew_121, если писать без конструктора так:
то будет вызван конструктор по-умолчанию а он описан так:
Поэтому это будет одно и тоже верно mes? |
||||
|
|||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
yngwie19, Уважаемый, вы наверняка не представляете себе всю обширность и мощь языка С++ как такового, и сложность Qt в частности.
Это было первое. Второе. Как в это случае указать parent-а, хз* Третье. Большинству кутешных объектов, нужен parent. Иначе они просто работать не будут. Четвертое. Если привыкнуть так писать код, однажды споткнетесь, и придется писать как положено. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Да, инизиализация в данном случаяе одинаково Но я думаю andrew_121, имел ввиду не саму инициализацию, а то что Вы убрали в вашем классе возможность задавать parent`a. по крайней мере моя фраза относилась именно к этому. т.е если Вы уверены, что лишение возможности задавать родителя необходимо или удобно, то пожалуйста. |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
Дополню. Касательно стандарта.
Так же плохо изучать программирование используя компиляторы от Microsoft, Borland. Так как эти компиляторы приучают к плохому! Добавлено через 2 минуты и 21 секунду Я так понимаю, что yngwie19, только учится кодить. Наверное лучше его не приучать к не стандартному решению? Добавлено через 5 минут и 9 секунд Касательно машинных типов, для них вобще не нужно вызывать конструктор. Это просто инициализация. Добавлено через 7 минут и 43 секунды И еще. Нужно определиться. Либо говорим о языке С++, и стандарте, либо о C++ и Qt. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
я считаю, что в программировании главное понимание, а не набор заученных фраз. Да сразу все понять нельзя и некоторые детали приходится зазубривать. Но судя по вопросам(из других тем) yngwie19, он пытается именно понять. Ну а тут жизнь сама заставит написать у наследника "прием" родителя. Это сообщение отредактировал(а) mes - 13.6.2009, 13:55 |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Ну вообщем правильно ли Я понял что при создании объекта класса унаследованного от QObject необходимо в его конструктор передать указатель на родителя?
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| andrew_121 |
|
||||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
Солидарен! Значит...пусть решает... Добавлено через 1 минуту и 8 секунд
Ну...она в коде....сорри, не то понял( -------------------- Удалил аккаунт. Прощайте! |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Нет. Необходимо передавать в конструктор, только для объектов тех классов, которые этого требуют. Для остальных "можно", а не "необходимо" Но пояснение, высказанное andrew_121, относится не к созданию объекта, а к тому что Вы в конструкторе скрыли возможность "передачи" родителя. Т.е ограничили того, кто будет создавать объект Вашего класса или будет от него наследоваться А ограничения далеко не всегда удобны. Это сообщение отредактировал(а) mes - 13.6.2009, 14:42 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |