crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> class QPushButton вместо include <QPushButton>, class VS #include
Rocky
  опции профиля:
сообщение 10.2.2011, 11:51
Сообщение #11


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


Цитата(Алексей1153 @ 10.2.2011, 12:33) *
Цитата(Rocky @ 10.2.2011, 13:28) *
хидер включать необходимо

да, но включать его надо уже только в файл реализации

Алексей1153, ты вырываешь слова из контекста. Если есть класс В, который наследуется от класса А, то хидер класса А обязательно нужно включать в хидере класса В. То что пишешь ты - да. Но если ты будешь наследоваться от QMyLineEditWrapper - тебе опять-таки нужно будет включение хидера с этой структурой. От этого никуда не уйти. А как я понял твою задумку, то что ты сделал - это ответ на вопрос

Цитата(Алексей1153 @ 10.2.2011, 12:33) *
Цитата('я')
Наследование можно опять-таки заменить через указатель (практически всегда).


оу, расскажи, как ?.

из которого следует, что да, в этом случае достаточно будет предварительного объявления. Но это не обход
Цитата
Если есть класс В, который наследуется от класса А, то хидер класса А обязательно нужно включать в хидере класса В

это обход наследования.

А в случае, если тебе нужно делать override функций базовых классов (virtual), то тут да, нужно наследоваться. Просто есть люди, которые где надо и не надо лепят наследование, думая, что без него никак. Вообще по этому вопросу советую оч хорошую книжку...То-ли Александреску, то-ли Саттера... Щас не вспомню, нужно дома посмотреть. Там вобщем рассказно оч подробно как делать всякие интересные штуки.

Хотя, вероятно я придираюсь к словам :) Фсё, больше не буду))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 10.2.2011, 12:21
Сообщение #12


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(Rocky @ 10.2.2011, 13:51) *
Алексей1153, ты вырываешь слова из контекста

да нет, не вырываю. Ты , во-первых, сам их жирным выделил. Ну а включать надо - это факт :) вопрос в том - куда включать. Где хидер будет виден только локально, либо же торчать повсюду

Цель пимпла: сделать содержимое хидера реально видимым только в файле реализации. Это его единственный плюс (но как раз он иногда требуется).
А вот если у тебя есть большой массив элементов, и ты вдруг захотел сделать его массивом указателей, а класс ячейки засунул по паттерну pimpl в реализацию, то тут сильно проиграешь в скорости работы и фрагментации кучи. Поэтому в этом случае лучше разместить в реализации весь массив как единый объект и дописать интерфейсные методы для работы с ним извне

Цитата(Rocky @ 10.2.2011, 13:51) *
Просто есть люди, которые где надо и не надо лепят наследование, думая, что без него никак

ну, по затратам памяти и скорости (кхм) наследование абсолютно ничем не отличается от включения мембера с классом, какой был бы у класса-родителя. Но тут становится недоступен или труднодоступен полифорфизм
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 10.2.2011, 19:34
Сообщение #13


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


to Алексей1153
Цитата(Litkevich Yuriy @ 9.2.2011, 6:19) *
Если же ты используешь класс для наследования, или для создания переменной на стеке (обычной) или используешь члены некого класса, то придётся использовать инклюд. Иначе компилятор не будет ничего знать об особенностях класса.
Цитата(Алексей1153 @ 10.2.2011, 8:16) *
class QMyLineEdit;
struct QMyLineEditWrapper
{    
    QMyLineEdit* p;    
    QMyLineEditWrapper(QWidget* parent=0);
};
Не увидел в приведенном коде не наследования, ни создания переменной на стеке ни использования членов другого класса.
Юрий пытался объяснить ТС при каких условиях можно использовать предварительное объявление, при каких нет. Ты же как как всегда перевернул всё с ног на голову.

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


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 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


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(kwisp @ 11.2.2011, 12:58) *
по-моему вы ребята уже предвзято к друг другу относитесь

ни грамма ))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.2.2011, 12:47
Сообщение #18


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Резюме:
Если класс наследник другого, то заголовочник от базового всё равно нужно включать. И т.д.
Т.е. те ограничения которые я написал, будут действовать всегда и для всех описанных случаев.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 10:13