我最近下载了Unreal 4引擎的射击游戏,现在正试图分析其中的C++代码,但我的C++水平不太好,我注意到了一个名为
class AShooterCharacter* MyPawn;
在ShooterWeapon.h
头文件中设置。
我试图理解class
部分是什么意思。
[编辑] 我注意到有人贬低我的问题,所以我改成了一个问题。我希望人们愿意帮助我而不是贬低我的问题。没有愚蠢的问题: )...特别是在编程方面。
我最近下载了Unreal 4引擎的射击游戏,现在正试图分析其中的C++代码,但我的C++水平不太好,我注意到了一个名为
class AShooterCharacter* MyPawn;
在ShooterWeapon.h
头文件中设置。
我试图理解class
部分是什么意思。
[编辑] 我注意到有人贬低我的问题,所以我改成了一个问题。我希望人们愿意帮助我而不是贬低我的问题。没有愚蠢的问题: )...特别是在编程方面。
AShooterCharacter
已经在作用域内,那么它基本上可能什么也不意味着。class AShooterCharacter* MyPawn;
// ^ the same as just:
// AShooterCharacter* MyPawn;
struct
关键字:struct Foo
{
int x, y, z;
};
struct Foo obj;
Foo
本身就成为了一个可命名的类型。Foo obj;
如果您想要,仍然可以编写struct Foo
。
对于“class”来说也是如此,这只是语言语法和语义定义的结果。
只有两种情况下才会有所不同。
当在某些其他名称被隐藏时,您可以使用它来指定要引用的范围内类型名称,例如:
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`;
}
但是如果你觉得自己“需要”这个,那么在我看来,你有更大的问题!
否则,这与进行以下操作相同:
class Foo; // a forward declaration
Foo* x;
如果你要前向声明类型并立即声明该类型的对象指针,则可以通过这种方式节省一行代码。
不过,这并不是常见的编码风格。
这就是所谓的“前向声明”。
它允许您指定一个指向类/结构体名称的指针,以便您不必包含定义该类/结构体的特定头文件。
当打破头文件之间的循环依赖关系时,此功能特别可行。
您可以通过检查ShooterWeapon.h
中未包含任何定义AShooterCharacter
的文件来验证这一点。
让我们从维基百科开始简单介绍。
类是使用关键字class声明的用户定义类型或数据结构,它具有数据和函数(也称为方法)作为其成员,其访问受三个访问说明符private、protected或public的控制(默认情况下,对类的成员的访问是私有的)。在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
的一个对象,也就是说,它变成了一个可以存储 int
和 char
值的数据类型(你还可以添加其他数据类型,比如 float)。
然后你可以调用函数 getvalue()
来获取 num
和 ch
的值,然后输出这些值,例如:
myobject.getvalue();
myobject.disp()
A myobject;
,使用 class A myobject;
有什么好处?无论如何,A
都是一种数据类型,无论您是否在其前面放置了 class
。但是你说...“好处是你可以决定其中所有项”,也就是说,您可以忽略公共和私有成员和方法吗?不确定您的意思是什么。 - numerical25
class
关键字是可选的。 - πάντα ῥεῖclass
关键字时(struct
可以被认为是C兼容性)。 - Lightness Races in Orbit