什么是 Super:: 以及我们为什么使用它。
我搜索了一下,发现我们使用 Super:: with override functions。这样我们就调用了基类函数。为什么我们要这样做?有人可以正确解释吗?
Super 是一个
typedef
当前类的基类。它是GENERATED_BODY()
的一部分,将由UnrealHeaderTool
与ThisClass
一起添加。
在下面的例子中,我定义了一个继承自
UYourClass
的类UObject
,它是许多Unreals类的基础对象。
class UYourClass : public UObject
{
GENERATED_BODY()
};
GENERATED_BODY()
将包含以下代码:
typedef UYourClass ThisClass;
typedef UObject Super;
当你想为你的基类的重写行为调用一个实现时,你不需要写基类型名,而是可以只使用
Super
。而在访问自己的类时,也可以使用ThisClass
。它使代码更短和更便携,例如当您使用宏生成代码时。
在下面的场景中,我们继承了
AActor
并覆盖了它的BeginPlay
方法,所以我们可以初始化我们自己的对象。但是因为AActor
也在它的BeginPlay
实现中做了一些事情(例如在蓝图中调用节点“开始播放”),我们也必须调用它,否则行为是错误的。
class ABuilding : public AActor
{
GENERATED_BODY()
public:
virtual void BeginPlay() override;
}
void ABuilding::BeginPlay()
{
Super::BeginPlay();
// Do your own stuff here
}
就我愿意描述的范围而言。超出这一点的一切都只是“C++ 那样工作”或“OOP 那样工作”,这不适合这个网站。