Предварительные объявления классов

244
12 февраля 2017, 11:42

Зачем нужно предварительные объявления классов в заголовочном файле?

#ifndef UIBLUE
#define UIBLUE
#include QDialog
class QCheckBox; 
class QLable;    
class QLineEdit; 

class UiBlue : public QDialog
{
    Q_OBJECT
};
#endif // UIBLUE
Answer 1

Если ваш заголовочный файл uiblue.h (я предполагаю, что он так называется), использует класс QCheckBox (и т.п.) только для того, чтобы объявлять указатели/ссылки на этот класс и не пытается доступаться к членам этого класса, то вы можете попробовать сэкономить на времени компиляции. А именно, вы можете не включать заголовочный файл <QCheckBox> в ваш заголовочный файл, а просто выполнить предварительные объявления класса QCheckBox и других требуемых классов, как это сделано в вашем примере.

Включить <QCheckBox> куда-то потом вам все таки придется, но при соответствующей организации определения методов вашего класса UiBlue, включить <QCheckBox> вам придется только в файл(ы) реализации класса UiBlue, которые работают с внутренностями класса QCheckBox. Скажем, это будет файл uiblue.cpp.

Таким образом другие файлы вашего проекта, которые включают в себя uiblue.h, не будут тем самым вызвать еще и косвенного включения заголовочных файлов <QCheckBox>, <QLineEdit> и пр., что потенциально может ускорить компиляцию этих других файлов.

READ ALSO
Ошибка в реализации сортировки

Ошибка в реализации сортировки

Если я правильно понял проблему, то она заключается в том, что я не ставлю некоторые числа на правильное местоНо я не знаю, как исправить эту...

357
Библиотека для работы с русским языком c++?

Библиотека для работы с русским языком c++?

Есть массив русских буквНужно работать с элементами этого массива, также как и с обычными английскими буквами

305
Как получить снимок экрана в строковый буфер на C++?

Как получить снимок экрана в строковый буфер на C++?

Задача - удалённый мониторинг рабочего стола сотрудникаДля передачи через сокет нужен строковый буфер с jpeg-снимком всего того, что происходит...

248