Страницы

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

пятница, 20 декабря 2019 г.

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

#cpp


Есть два класса - MdiChild и MainWindow. В заголовке MainWindow приведено объявление: 
class MdiChild;

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


Ответы

Ответ 1



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

Ответ 2



Это называется предварительное объявление класса, для того чтобы этот класс можно было использовать до его определения.

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

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