Super::BeginPlay() , Super::Tick()

问题描述 投票:0回答:1

什么是 Super:: 以及我们为什么使用它。

我搜索了一下,发现我们使用 Super:: with override functions。这样我们就调用了基类函数。为什么我们要这样做?有人可以正确解释吗?

superclass unreal-engine5
1个回答
0
投票

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 那样工作”,这不适合这个网站。

© www.soinside.com 2019 - 2024. All rights reserved.