что такое 'class' в 'class DataType * Variable' в примере игры Unreal Engine Shooter

Я недавно загрузил Shooter Game для Unreal 4 Engine, и я просто пытаюсь разобрать c ++, но мой c ++ не самый лучший Я замечаю переменную с именем

class AShooterCharacter* MyPawn; 

Установить в заголовочном файле для ShooterWeapon.h

Я пытаюсь понять, что такое class часть.

[Edit] Я заметил, что люди отказались от моего вопроса, поэтому я изменил его на один вопрос. Я надеюсь, что люди захотят помочь, а не унизить мой вопрос. Нет такого понятия, как тупой вопрос :) ... Особенно в программировании


person numerical25    schedule 11.04.2015    source источник
comment
Это объявление переменной указателя класса. Ключевое слово class необязательно.   -  person πάντα ῥεῖ    schedule 11.04.2015
comment
Я не получил голосов против. На самом деле это неплохой вопрос, поскольку этот синтаксис объявления необычен, особенно когда используется ключевое слово class (struct может защищаться как C-совместимость).   -  person Lightness Races in Orbit    schedule 12.04.2015
comment
Да, это то, почему нереально задавать такие вопросы, а не только о языке.   -  person paulecoyote    schedule 08.08.2015


Ответы (3)


Если AShooterCharacter уже находится в области видимости, это, вероятно, ничего не значит.

class AShooterCharacter* MyPawn;
// ^ the same as just:
// AShooterCharacter* MyPawn;

В C при именовании типов структур нужно было использовать ключевое слово struct:

struct Foo
{
   int x, y, z;
};

struct Foo obj;

В C ++ этого делать не нужно, потому что Foo сам по себе становится именуемым типом:

Foo obj;

Но вы все равно можете написать struct Foo, если хотите.

То же самое относится к class, как следствие того, как определены грамматика и семантика языка.

Есть только два случая, когда это имеет значение.

Использование 1: устранение неоднозначности (своего рода)

Вы можете использовать его, чтобы указать, что вы хотите ссылаться на имя типа в области видимости, когда оно в противном случае скрыто другим именем, например:

class Foo {};

int main()
{
   const int Foo = 3;

   // Foo x;     // invalid because `Foo` is now a variable, not a type
   class Foo x;  // a declaration of a `Foo` called `x`;
}

Но если вы обнаружите, что это «нужно», то, на мой взгляд, у вас проблемы посерьезнее!

Использование 2: Форвардное объявление

В противном случае это то же самое, что и следующее:

class Foo;   // a forward declaration
Foo* x;

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

Однако это не общий стиль.

person Lightness Races in Orbit    schedule 11.04.2015

Это так называемое «предварительное объявление».

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

Эта функция особенно актуальна при нарушении циклических зависимостей между файлами заголовков.

Вы можете убедиться, что это так, проверив, что AShooterCharacter не определен ни в каких файлах, включенных ShooterWeapon.h.

person arul    schedule 11.04.2015

Давайте сделаем небольшое введение (из Википедии)

Класс - это определяемый пользователем тип или структура данных, объявленная с ключевым словом class, который имеет данные и функции (также называемые методами) в качестве своих членов, доступ которых регулируется тремя спецификаторами доступа private, protected или public ( доступ по умолчанию к членам класса является частным). Класс (объявленный с помощью ключевого слова class) в C ++ отличается от структуры (объявленной с помощью ключевого слова struct), поскольку по умолчанию члены являются частными в классе, в то время как они являются общедоступными в структуре. Закрытые члены недоступны вне класса; к ним можно получить доступ только через методы класса. Открытые члены образуют интерфейс к классу и доступны вне класса. Экземпляры этих типов данных известны как объекты и могут содержать переменные-члены, константы, функции-члены и перегруженные операторы, определенные программистом.

Класс используется для реализации объектно-ориентированного программирования (ООП).

Помещая ключевое слово class перед идентификатором, он становится типом данных (например, int или char), но хорошо то, что вы можете решить, что все в нем присутствует. Например

class A
{
    int num;
    char ch;
  public:
    void getvalue ( )
    {
       std::cin >> num >> ch ;
    }
    void disp ( )
    {
       std::cout << num << std::endl << ch ;
    }
};

Теперь A - это класс, и когда вы это сделаете

A myobject ;

myobject становится объектом класса A, то есть он становится типом данных, который может хранить значения int и char (вы также можете добавлять любые другие типы данных, например float).

И вы можете вызвать функцию getvalue(), чтобы получить значения для num и ch, а затем вывести значение, например

myobject.getvalue();
myobject.disp()
person Arun A S    schedule 11.04.2015
comment
Я понимаю, что такое класс. Я просто не понимаю, зачем кому-то ставить префикс класса, если он необязательный. Каковы преимущества выполнения class A myobject; по сравнению с A myobject; A - это тип данных, несмотря ни на что. лучше поставить class перед ним или нет. Но потом вы сказали .... хорошая часть заключается в том, что вы можете решить, что все в нем присутствует .... Как вы можете игнорировать публичные и частные члены и методы ?? Не уверен, что вы имеете в виду. - person numerical25; 11.04.2015
comment
@ numeric25 Это в основном возврат к C, который иногда требовал некоторых дополнительных struct ключевых слов в определенных местах. - person Neil Kirk; 11.04.2015
comment
Это хорошее объяснение того, что такое классы, но вы не поняли и не ответили на вопрос. - person Lightness Races in Orbit; 12.04.2015