В моем проекте C++, когда, я должен использовать включение (#include "myclass.h"
) из заголовочных файлов? И когда делают я должен использовать предописание класса (class CMyClass;
)?
Как правило, сначала попробуйте предварительное объявление. Это сократит время компиляции и т. Д. Если это не компилируется, используйте #include
. Вы должны использовать #include, если вам нужно выполнить одно из следующих действий:
новое
/ удалить
, скопировать и т. Д. (6,7,8,9 от @Mooing Duck)
Их, наверное, больше, но у меня сегодня нет шляпы по языковому праву.
Вам следует стремиться к минимизации ваших #include
как для сокращения времени компиляции, так и для обеспечения модульности и тестируемости. Как говорит @ypnos, переадресация классов отлично подходит, когда вам нужны только указатели.
Некоторые практические советы по уменьшению зависимостей заголовков см., Например, эта статья .
Если вам нужен только указатель на класс и вам не нужны какие-либо знания о классе, а не о его имени, вы можете использовать предварительное объявление.
Как новичок, вы всегда должны #include заголовочные файлы, когда вам нужно использовать типы или функции, которые они содержат - не пытайтесь "оптимизировать" вашу сборку, объявляя все заранее - это почти никогда не нужно, даже в больших проектах, если проект хорошо спроектирован.
Единственный раз, когда вам абсолютно необходимо прямое объявление, это в ситуациях, подобных этой:
struct A {
void f( B b );
};
struct B {
void f( A a );
};
когда каждая структура (или класс) ссылается на тип другой. В этом случае вам нужно прямое объявление B, чтобы решить проблему:
struct B; // forward declaration
struct A {
void f( B b );
};
struct B {
void f( A a );
};