Superクラスについて
BeginPlay()関数の中に見かけがちなSuperクラスについて、標準のC++ではなく、UObject継承のクラスに提供されている何かっぽい
UCLASS() class ATestClass_A : public AActor { GENERATED_BODY() public: UFUNCTION(BlueprintCallable, Category = "TEST") virtual FString C() { return TEXT("Called C() in TESTClass_A"); } }; UCLASS() class ATestClass_B : public ATestClass_A { GENERATED_BODY() public: UFUNCTION(BlueprintCallable, Category = "TEST") virtual FString C() override { FString Text = TEXT("Called C() in TESTClass_B then -> "); Text += Super::C(); return Text; } }; UCLASS() class ATestClass_C : public ATestClass_B { GENERATED_BODY() public: UFUNCTION(BlueprintCallable, Category = "TEST") virtual FString C() override { FString Text = TEXT("Called C() in TESTClass_C then -> "); Text += Super::C(); return Text; } }
このようなクラスと関数を用意して、UE側でATestClass_CオブジェクトでC()を実行してみる
ここでATestClass_BからC()の実装を取り除いて実行してみる
まとめ
- 一つ上の親のクラスがSuperクラス
- UObjectどうしの多重継承は禁止されているので、Superクラスは一つに絞られる
- 実装がないクラスの関数は飛ばされる(上記状態だとATestClass_A::C()は2回呼ばれたりはしない)
かいてた