11

我最近下载了 Unreal 4 Engine 的射击游戏,我只是想把 c++ 分开,但我的 c++ 不是最好的,我注意到一个名为

class AShooterCharacter* MyPawn; 

在头文件中设置为ShooterWeapon.h

我试图了解这class部分是什么。

[编辑] 我注意到人们拒绝了我的问题,所以我将其更改为一个问题。我希望人们愿意帮助而不是贬低我的问题。没有愚蠢的问题:)...尤其是在编程中

4

3 回答 3

8

如果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;

如果您要转发声明类型并立即声明指向该类型对象的指针,可以说它节省了一行代码。

不过,这不是常见的风格。

于 2015-04-11T21:49:04.867 回答
2

这就是所谓的“前向声明”。

它允许您指定指向类/结构名称的指针,这样您就不必包含定义该类/结构的特定头文件。

在打破头文件之间的循环依赖关系时,此功能特别可行。

AShooterCharacter您可以通过检查ShooterWeapon.h.

于 2015-04-11T22:40:15.920 回答
0

让我们做一个小介绍(来自维基百科

类是用关键字声明的用户定义类型或数据结构,类具有数据和函数(也称为方法)作为其访问权限由私有、受保护或公共三个访问说明符控制的成员(默认情况下,对类成员的访问是私有的)。C++ 中的类(用关键字 class 声明)与结构(用关键字 struct 声明)不同,默认情况下,成员在类中是私有的,而在结构中是公共的。私有成员在类外是不可访问的;它们只能通过类的方法访问。公共成员形成类的接口,并且可以在类外访问。这些数据类型的实例称为对象,可以包含程序员定义的成员变量、常量、成员函数和重载运算符。

一个类用于实现面向对象编程(OOP)

通过将关键字放在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,也就是说,它成为可以存储intchar值的数据类型(您也可以添加任何其他数据类型,例如 float )。

您可以调用该函数getvalue()来获取值numch然后输出值,例如

myobject.getvalue();
myobject.disp()
于 2015-04-11T16:39:13.003 回答