Russian Qt Forum

Программирование => С/C++ => Тема начата: nomit от Декабрь 14, 2011, 19:33



Название: Давно интересующий вопрос.
Отправлено: nomit от Декабрь 14, 2011, 19:33
Привет всем народ. У меня уже давно созрел вопрос, ну незнаю, как сформулировать в поисковике что бы найти.

В разных статьях находил такую запись кода

Код:

#ifndef LISTWIDGET_H
#define LISTWIDGET_H

#include <QtGui>

class QListWidget;

class ListWidget : public QListWidget
{
    Q_OBJECT
private:
     QListWidget * listWidgetSurname;
public:
    explicit ListWidget(QWidget *parent = 0);


......


Вопрос заключается в вот в чем, зачем записывать класс QListWidget? Не проще подключить с помощью  #include ?

Есть такое подозрение, что это нужно что бы юзая, какую нибудь либу не нужно было копировать заголовочные файлы?(*.h)

Будьте добры дайте ответ, можно ссылку почитать для чего это нужно. Заранее благодарен. :)


Название: Re: Давно интересующий вопрос.
Отправлено: LisandreL от Декабрь 14, 2011, 19:45
При компиляции инклуды разворачиваются во вставку всего проинклуденного файла.
Поэтому в h-файлы, которые потом сами ещё куда-то инклудиться будет лучше не вставлять лишнего, это замедляет и так не очень быструю компиляцию.


Название: Re: Давно интересующий вопрос.
Отправлено: nomit от Декабрь 14, 2011, 20:27
Спасибо.  :)


Название: Re: Давно интересующий вопрос.
Отправлено: vregess от Декабрь 14, 2011, 23:19
Это называется forward declaration, если не по русски.
Помимо того, что описал LisandreL, это также решает проблему перекомпиляции зависимых элементов при изменении заголовочного файла.


Название: Re: Давно интересующий вопрос.
Отправлено: Авварон от Декабрь 15, 2011, 09:39
А еще без нее невозможно сделать 2 класса, содержащие друг друга.