2016-11-25 2 views
0

я смотрел нереальный учебник и столкнулись с этой строки кода:C++ Является ли "class Name *" указателем на класс?

class UStaticMeshComponent* Pickup; 

Это заявление вперед. Я некоторое время изучаю C++ и раньше ничего подобного не встречал. Я знаю о указателях и ссылках, но я никогда не видел этот формат: class Name *. Создаем ли мы указатель класса для другого класса? Я попытался найти имена классов, за которыми следует *, но единственный результат, который появился, касался типов данных и указателей.

public: 
    APickUp(); 

    virtual void BeginPlay() override; 

    virtual void tick (float DeltaSeconds); 

private: 
    class UStaticMeshComponent* Pickup; 
+0

Пожалуйста, не публикуйте скриншоты кода. Используйте текст (как показано на изображениях) и отформатируйте его как код (ctrl-k shortcut) – bolov

ответ

3
class UStaticMeshComponent* Pickup; 

Объявляет типа class UStaticMeshComponent, а также объявляет переменную Pickup указателя типа к UStaticMeshComponent. Таким образом, приведенный выше код является более или менее эквивалентны:

class UStaticMeshComponent; 
UStaticMeshComponent* Pickup; 

Потому что на данный момент у вас нет определения UStaticMeshComponent (только объявление), UStaticMeshComponent считается неполным типа. Есть несколько вещей, которые вы можете сделать с неполным типом. Один из них указывает на них указатели.

1

Если вы используете только указатель на тип, то тип не требуется для завершения, поэтому это работает нормально, даже если UStaticMeshComponent не определен. Это означает, что когда этот заголовок включен в один из ваших файлов cpp, он должен скомпилировать бит быстрее, чем если бы Pickup.h должен был включать заголовок, где определен UStaticMeshComponent.

Эта скорость может быть существенной в зависимости от того, насколько велика эта заголовок и сколько раз исключается включение во время компиляции.

Смежные вопросы