class QPushButton вместо include <QPushButton>, class VS #include |
Здравствуйте, гость ( Вход | Регистрация )
class QPushButton вместо include <QPushButton>, class VS #include |
Rocky |
10.2.2011, 11:51
Сообщение
#11
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Цитата(Rocky @ 10.2.2011, 13:28) * хидер включать необходимо да, но включать его надо уже только в файл реализации Алексей1153, ты вырываешь слова из контекста. Если есть класс В, который наследуется от класса А, то хидер класса А обязательно нужно включать в хидере класса В. То что пишешь ты - да. Но если ты будешь наследоваться от QMyLineEditWrapper - тебе опять-таки нужно будет включение хидера с этой структурой. От этого никуда не уйти. А как я понял твою задумку, то что ты сделал - это ответ на вопрос Цитата('я') Наследование можно опять-таки заменить через указатель (практически всегда). оу, расскажи, как ?. из которого следует, что да, в этом случае достаточно будет предварительного объявления. Но это не обход Цитата Если есть класс В, который наследуется от класса А, то хидер класса А обязательно нужно включать в хидере класса В это обход наследования. А в случае, если тебе нужно делать override функций базовых классов (virtual), то тут да, нужно наследоваться. Просто есть люди, которые где надо и не надо лепят наследование, думая, что без него никак. Вообще по этому вопросу советую оч хорошую книжку...То-ли Александреску, то-ли Саттера... Щас не вспомню, нужно дома посмотреть. Там вобщем рассказно оч подробно как делать всякие интересные штуки. Хотя, вероятно я придираюсь к словам Фсё, больше не буду)) |
|
|
Алексей1153 |
10.2.2011, 12:21
Сообщение
#12
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Алексей1153, ты вырываешь слова из контекста да нет, не вырываю. Ты , во-первых, сам их жирным выделил. Ну а включать надо - это факт вопрос в том - куда включать. Где хидер будет виден только локально, либо же торчать повсюду Цель пимпла: сделать содержимое хидера реально видимым только в файле реализации. Это его единственный плюс (но как раз он иногда требуется). А вот если у тебя есть большой массив элементов, и ты вдруг захотел сделать его массивом указателей, а класс ячейки засунул по паттерну pimpl в реализацию, то тут сильно проиграешь в скорости работы и фрагментации кучи. Поэтому в этом случае лучше разместить в реализации весь массив как единый объект и дописать интерфейсные методы для работы с ним извне Просто есть люди, которые где надо и не надо лепят наследование, думая, что без него никак ну, по затратам памяти и скорости (кхм) наследование абсолютно ничем не отличается от включения мембера с классом, какой был бы у класса-родителя. Но тут становится недоступен или труднодоступен полифорфизм |
|
|
igor_bogomolov |
10.2.2011, 19:34
Сообщение
#13
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
to Алексей1153
Если же ты используешь класс для наследования, или для создания переменной на стеке (обычной) или используешь члены некого класса, то придётся использовать инклюд. Иначе компилятор не будет ничего знать об особенностях класса.
Юрий пытался объяснить ТС при каких условиях можно использовать предварительное объявление, при каких нет. Ты же как как всегда перевернул всё с ног на голову. to Алексей1153, to kwisp Да в пимпл без предварительного объявления никуда, и поговорить про это интересно. Вот только ТС спрашивал не про это. Тут скорее можно было написать, что в некоторых случаях без предварительного объявления не обойтись, и показать это на примере пимпла. А вот говорить что можно отнаследоваться от класса class QMyLineEdit:public QLineEdit не сделав в том же файле includ не правильно. to Алексей1153 Цитата Цель пимпла: сделать содержимое хидера реально видимым только в файле реализации Ты путаешь цели и средства достижения цели. То о чем ты говоришь - это средство/способ решения, а цели у пимпла другие.
|
|
|
Rocky |
10.2.2011, 20:04
Сообщение
#14
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
igor_bogomolov, спасибо, хоть ты понял что я пытался сказать
|
|
|
Алексей1153 |
10.2.2011, 20:10
Сообщение
#15
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
igor_bogomolov, мы просто напросто в ненужные дебри полезли )) А в целом не всё так трагично, как ты воспринимаешь
|
|
|
kwisp |
11.2.2011, 10:58
Сообщение
#16
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
по-моему вы ребята уже предвзято к друг другу относитесь. это по градусу сообщения видно.
опять же по-моему ТС разницу между форвардами и инклюдами понял. цель достигнута. это хорошо. П.С. что касается моего ответа. Юрию, я наверное действительно не понял, что в точности он спрашивал, и в ответе написал как уйти от включения заголовочника в заголовочник.... |
|
|
Алексей1153 |
11.2.2011, 11:22
Сообщение
#17
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
Litkevich Yuriy |
12.2.2011, 12:47
Сообщение
#18
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Резюме:
Если класс наследник другого, то заголовочник от базового всё равно нужно включать. И т.д. Т.е. те ограничения которые я написал, будут действовать всегда и для всех описанных случаев. |
|
|
Текстовая версия | Сейчас: 2.12.2024, 2:30 |