Я просто наткнулся на C++ код с вызовом имени класса в верхней части заголовка файла, напримервызова имя класса в заголовочном файле
class CFoo;
class CBar
{
....
};
Мой вопрос, что class CFoo
для?
Спасибо большое!
Я просто наткнулся на C++ код с вызовом имени класса в верхней части заголовка файла, напримервызова имя класса в заголовочном файле
class CFoo;
class CBar
{
....
};
Мой вопрос, что class CFoo
для?
Спасибо большое!
Это называется форвардной декларацией. Это означает, что существует класс с именем CFoo, который будет определен позже в файле (или другой включен). Это, как правило, используется для членов указателей в классах, таких как:
class CFoo;
class CBar {
public:
CFoo* object;
};
Это намек на компилятор C++, говоря это не урод, что имя типа используется без значения, даже если он hasn» t видел полное определение для CFoo.
Это называется форвардной декларацией.
class CFoo;
Есть только заявление о том, что класс существует; даже если вы еще не видели определение, вы все равно можете играть с (CFoo *) или (CFoo &), то есть указателями и ссылками на CFoo.
Вы также можете определить функции, возвращающие CFoo (по значению). – Tom
Действительно? Мне это кажется маловероятным, потому что для возврата по стоимости вам нужно знать, по крайней мере, размер CFoo. –
Почему бы просто не использовать вместо этого заголовочный файл, содержащий определение CFoo, зачем использовать этот метод? – user1084113
Они также могут быть в заголовочных файлах; предположим, что CFoo относится к классу CBAR (круговая ссылка). Иногда вам понадобится форвардная декларация в вашем заголовке, потому что вы не можете полностью определить один класс, не зная, что существует другой класс. –