Страницы

Поиск по вопросам

вторник, 6 ноября 2018 г.

Зачем нужно опережающее объявление?

Есть два класса - MdiChild и MainWindow. В заголовке MainWindow приведено объявление: class MdiChild; А вот в самом mainwindow.cpp подключен mdichild.h. С какой целью так делается? Можно ведь подключить mdichild.h в mainwindow.h? Или нет? P.S. Название вопроса написал по-дурацки. Ломал голову. Исправьте если кто придумает нормально.


Ответ

То, что Вы привели - это распростанненный хак. Для того, что бы иметь указатель или ссылку на класс, компилятору не нужно знать реальный размер класса. А не подключают заголовок по одной простой причине - ускорить компиляцию. Компилятор не будет разбирать большие заголовки и как следствие, компиляция может ускорится очень сильно. Так к примеру, рекомендуют делать в Google. В некоторых случаях даже создают отдельно компактные h файлы для включения. Более того, в стандартной библиотеке есть даже файл заголовка iosfwd - он нужен тогда, когда нужно использовать классы с iostream, но только указателиссылки (например, в заголовочном файле объявляется перегруженный оператор <<)

Комментариев нет:

Отправить комментарий