虚幻引擎射击游戏示例中'class DataType* Variable' 'class'的内容
what is 'class' in 'class DataType* Variable' in Unreal Engine Shooter Game Sample
我最近下载了虚幻4引擎的射击游戏,我只是想把c++拆开,但我的c++不是最好的。我注意到一个名为的变量
class AShooterCharacter* MyPawn;
在ShooterWeapon.h
的头文件中设置
我正在努力理解class
部分是什么。
[编辑]我注意到人们否决了我的问题,所以我把它改成了一个问题。我希望人们愿意帮助我,而不是贬低我的问题。没有愚蠢的问题:)。。。特别是在编程方面
如果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;
可以说,如果您要向前声明该类型并立即声明指向该类型对象的指针,则可以节省一行代码。
不过,这不是常见的风格。
这就是所谓的"正向声明"。
它允许您指定指向类/结构名称的指针,这样就不必包含定义该类/结构的特定头文件。
当打破头文件之间的循环依赖关系时,此功能尤其可行。
您可以通过检查ShooterWeapon.h
包含的任何文件中是否未定义AShooterCharacter
来验证是否存在这种情况。
让我们做一个小介绍(来自维基百科)
类是用户定义的类型或用关键字声明的数据结构以数据和函数(也称为方法)为成员的类其访问由私有的三个访问说明符控制,受保护的或公共的(默认情况下,对类成员的访问是私人)。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()
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- "Undefined class"作为is_base_of的论据
- 如何将class.cpp和class.hpp编译为一个.o文件
- '{'标记之前的预期类名,然后在预声明时无效使用不完整的类型'class class_name'
- 如何使用"derived input class"创建派生类?
- 错误:"Left of getValue must have class/struct/union"
- ' class a : b ' 和 ' class a : public b ' 之间的继承类不同
- Pybind11 Class Definition
- 当结构位于单独的头文件中时'unregistered datatype'在 QML 中出现Q_GADGET错误
- 在C++中使用没有合作伙伴Class/Cpp文件的头文件是否实用
- C2011 'CMemDC':Visual Studio 2019中的'class'类型重新定义
- TypeError: [c++ addon class] 不是构造函数
- C++ class template
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- Clearing Class Foo with new(pFoo) Foo()
- C++ class vs a library
- 继承类时"invalid use of incomplete type ‘class tree_node_t’"
- 虚幻引擎射击游戏示例中'class DataType* Variable' 'class'的内容